python学习之路

Python—继承

2019-05-26  本文已影响35人  Alcazar

继承

继承面向对象软件技术当中的一个概念,与多态、封装共为面向对象的三个基本特征。 继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
附上一个使用面向对象编程,并使用继承方式实现的模拟打怪游戏

注意

(特征包括属性和方法,自身的特性,拥有父类没有的)

(这个一般可以理解为是子类共有的,这就是父类更通用,而子类拥有其他的,所以子类更具体)

  • 父类中publicprotected修饰的属性,方法可以继承,private修饰的属性和方法不能被继承
  • Python 支持多继承 ,继承内容和继承循序相关.
    所有的类,都会默认继承object类

举个栗子:

class A:
    def __init__(self):
        self.name = 'A'

    def print_test(self):
        print('¥¥¥¥¥¥¥')

class B:
    def __init__(self):
        self.name = 'B'

# class c(A,B):
class C(B,A):
    name = 'C'
    def __init__(self):
        super(C, self).__init__()
        self.age = 20

    def print_test(self):
        super(C, self).print_test()
        print('$$$$$$$$$$$$')
c = C()
print(c.name)
print(c.age)
# # 调用属性或方法的查找顺序
print(C.__mro__)
c.print_test()

内存分析:


内存分析

输出:

B
20
(<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
¥¥¥¥¥¥¥
$$$$$$$$$$$$

如果

__mro__方法:

python中支持多重继承,在解析父类的__init__时,
定义解析顺序的是子类的__mro__属性,内容为一个存储要解析类顺序的元组。

组合优于继承

class A:
    def __init__(self):
        self.name = 'A'

    def print_test(self):
        print('¥¥¥¥¥¥¥')

class D:
    def __init__(self):
        self.a = A()

    def print_test(self):
        self.a.print_test()
        print('= = = = = = = ')

d = D()
d.print_test()
¥¥¥¥¥¥¥
= = = = = = = 
判断实例:
print(isinstance(C,B))
print(issubclass(B,A))
False
False
上一篇 下一篇

猜你喜欢

热点阅读