Python—继承

作者: Alcazar | 来源:发表于2019-05-26 10:03 被阅读35次

继承

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

注意

  • 1、子类拥有父类得特征,而父类没有,父类更通用,子类更具体,

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

  • 2、使用extends继承父类,语句格式:class 子类名 extends 父类名{}
  • 3、父类中一般只定义一般属性方法

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

  • 4、子类中通过super关键字来调用父构造方法
  • 5、在子类中可以继承父类得那些东西,哪些不可以继承:
  • 父类中publicprotected修饰的属性,方法可以继承,private修饰的属性和方法不能被继承
  • 6、规则: 创建子类对象的时候,首先调用的是父类的无参构造方法创建一个父类对象
  • 7、可以在子类中显示调用父类的有参构造方法
  • 8、如果父类的属性均为private修饰,则可以通过共有的getter,setter方法来调用
  • 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

相关文章

网友评论

    本文标题:Python—继承

    本文链接:https://www.haomeiwen.com/subject/spqxtctx.html