python的继承:继承提供了一种在类之间共享功能的方法,下面会讲述下列几种方式:
1、单继承关系
2、多继承关系
3、间接继承
4、super 函数
想象几个类,Cat,Dog,Rabbit等。虽然它们在某些方面可能有所不同(只有 Dog 可能有 bark 方法),但它们可能在其他方面相似(都具有 color 和 name 的属性)。
这种相似性可以通过使它们全部从包含共享功能的超类 Animal (俗称父类)中继承来表示。
要从另一个类继承一个类,请将超类名放在类名后面的括号中。
例如:
1、单继承关系
class A:
def spam(self):
print(1)
class B(A):
def spam(self):
print(2)
super().spam()
B().spam()
打印结果:
结果:
2
1
上面代码执行的过程为:B().spam() :B类因为继承了A类就同时拥有了B类和A类的功能,B类此时调用spam()对象,而spam()对象在A、B两个类中都有,所以输出2、1,为什么先输出2呢?因为代码的规则时就近原则。
2、多继承关系
class Animal:
def __init__(self, name, color):
self.name = name
self.color = color
class Cat(Animal):
def purr(self):
print("Purr...")
class Dog(Animal):
def bark(self):
print("Woof!")
fido = Dog("Fido", "brown") #fido=>法斗、菲多
print(fido.color) #父类的属性也是可以调用的;
fido.bark()
class Pig(Cat,Dog): #可以一次继承几个类;
pass
p = Pig('阿狗','黄色')
p.purr()
p.bark()
执行结果
brown
Woof!
Purr...
Woof!
上面代码执行的过程为: Cat和Dog继承Animal,意思就是都继承了Animal类的功能,而Pig继承(Cat,Dog),fido = Dog(“Fido”, “brown”),——》————init__初始化,先执行print(fido.color) 得到brown,Dog(Animal):执行得到Woof,下面规则类似,其中pass是占位符,方便你下次书写,不至于报错
3、间接继承
class A:
def method(self):
print("A method")
class B(A):
def another_method(self):
print("B method")
class C(B):
def third_method(self):
print("C method")
c = C() #说明此时C类拥有A,B类中所有的属性和方法;
c.method()
c.another_method()
c.third_method()
结果:
A method
B method
C method
上面代码执行的过程为:B继承A类,C类继承B类,C等于拥有A‘、B的功能呢个,此时将c = C() 说明此时C类拥有A,B类中所有的属性和方法;下面依次调用得到A method,B method,C method
4、super 函数
class AA:
name = "helloworld"
def __init__(self):
print('构造方法')
def spam(self):
print(1)
class BB(AA):
def spam(self): #重写;
print(2)
super().spam() #调用父类的方法 super()函数一定是放在子类中; 解决方法名和属性相同时;
print(super().name) #调用父类的属性
AA.__init__(self) #调用父类的构造方法,一定要用类名来调用;
b = BB() #new出一个对象,创建一个对象;
b.spam()
BB().spam() #匿名对象的写法;
打印
构造方法
2
1
helloworld
构造方法
构造方法
2
1
helloworld
构造方法
Process finished with exit code 0
上面代码其他的执行规则都类似,只有一个super 函数,只在子类使用,使用的场景是父子类属性相同时,在子类需要使用父类的时候