# 继承 --- 解决代码的重复
class A:
pass
class B(A):
pass
B继承A,A是父类,B是子类
A是父类 基类 超类
B是子类 派生类
子类可以使用父类中的 方法、静态变量
父类和子类方法的选择:
子类的对象,如果去调用方法,永远优先调用自己的,自己有就调用自己的,自己没有就调用父类的
如果自己有,还想调用父类的,直接在子类方法中 父类名.方法名(self)
class A:
def __init__(self, name):
self.name = name
def eat(self):
print(f'{self.name} is eating')
def drink(self):
print(f'{self.name} is drinking')
def sleep(self):
print(f'{self.name} is sleeping')
class Cat(A):
def eat(self):
print('hahah')
A.eat(self)
def climb_tree(self):
print(f'{self.name} is climb tree')
class Dog(A):
def home(self):
print(f'{self.name} is keeping home')
tom = Cat('tom')
print(tom.name)
tom.eat()
# 子类中独有的属性
class A:
def __init__(self, name):
self.name = name
def eat(self):
print(f'{self.name} is eating')
def drink(self):
print(f'{self.name} is drinking')
def sleep(self):
print(f'{self.name} is sleeping')
class Cat(A):
def __init__(self, name, color):
A.__init__(self, name) # 调用父类的初始化,去完成一些通用属性的初始化值
self.color = color # 派生属性
def climb_tree(self):
print(f'{self.name} is climb tree')
tom = Cat('tom','blue')
print(tom.color)
print(tom.name)
# 多继承
# 一些语言不支持多继承:java
# 一个类有多个父类,在调用父类方法的时候,按照继承顺序,先继承的就先寻找
class A:
def func(self): print('in A')
class B:
def func(self): print('in B')
class C(A, B):
pass
class D(B,A):
pass
C().func() # in A
D().func() # in B