继承、多态
class A:
print("First A")
def __init__(self,a):
print("A")
print("First A1")
class B:
print("First B")
def __init__(self,a,b):
print("B")
class D(A,B):# 当我们在实例化子类时,则会先初始化继承的父类
print("D")
def __init__(self,a,b,c):
super(D,self).__init__(a)
self.c=c
d = D(1,2,3) #实例化子类
# First A
# First A1
# First B
# D
# A
(1) 一个类可以不继承任何类,也可以继承一个类或多个类;
(2) 无论父类中有多少个__init__方法,只会执行其中1个;
(3) 子类可以覆盖父类中的属性或方法;
(4) 当我们在实例化子类时,则会先初始化继承的父类,父类的执行顺序按照从左到右顺序执行;
多态(polymorphic)必须满足三个条件:
(1) 继承;
(2) 重写;
(3) 父类对象指向子类实例;
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
pass
@staticmethod ####如果硬要说多态,建议使用静态方法来处理,而非普通函数
def animal_talk(obj):
obj.talk()
class Cat(Animal):
def talk(self):
print('喵!')
class Dog(Animal):
def talk(self):
print('wang')
d = Dog("小黑")
c = Cat("小白")
# def animal_talk(obj):
# obj.talk() ###这也是一个能实现功能的函数,因此python多态才具有争议性
Animal.animal_talk(c)
Animal.animal_talk(d)