-
相关概念:
-
继承:父类的属性和方法子类可以直接拥有称为继承
-
派生:子类在父类的基础上衍生出来的新的特征(属性和方法)
-
总结:其实他们是一回事,只是描述问题的角度侧重点不同(继承侧重相同点,派生侧重不同点)
-
-
相关语法:
# class Animal(object): # 当没有指定父类时,相当默认父类为object class Animal: def __init__(self, name): self.name = name ? def eat(self): print(‘小动物喜欢一天到晚吃个不停‘) # 继承自Animal class Dog(Animal): pass ? d = Dog(‘旺财‘) # 直接拥有父类的方法 d.eat() # 直接拥有父类的属性 print(d.name)
-
派生:子类可以扩充属性和方法
class Animal: def run(self): print(‘小动物喜欢到处乱跑‘) class Rabbit(Animal): # 添加方法 def eat(self): print(‘爱吃萝卜和青菜‘) xiaobai = Rabbit() xiaobai.run() xiaobai.eat() # 添加属性 xiaobai.color = ‘white‘ print(xiaobai.color)
-
重写:
-
父类的方法完全不合适,子类需要全部的覆盖
-
父类的方法合适,但是需要完善
-
示例:
class Animal: def run(self): print(‘小动物喜欢到处乱跑‘) ? def eat(self): print(‘小动物也是一天三顿‘) class Cat(Animal): # 当父类的方法完全不合适时,可以覆盖重写 def run(self): print(‘俺走的是猫步‘) ? # 父类的方法合适,但是子类需要添加内容完善功能 def eat(self): # 调用父类方法,不建议使用 # Animal.eat(self) # super(Cat, self).eat() # 类名及self可以不传 super().eat() print(‘不过俺喜欢吃鱼‘) ? jiafei = Cat() jiafei.run() jiafei.eat()
-
-
多继承
-
概念:一个类可以有多个父类
-
示例:
class A: def eat(self): print(‘eat func of A‘) class B: def eat(self): print(‘eat func of B‘) # 多继承,多个父类使用逗号隔开 class C(B, A): def eat(self): # 当多个父类拥有相同的方法时,会按照继承时的先后顺序进行选择 # super().eat() # 如果非要使用后面的类的方法时,可以明确指定进行调用 A.eat(self) c = C() c.eat()
-