子类继承父类的方法
决定一个类是不是子类在于括号中是否有父类名。
如果子类定义与父类同名的方法或属性,那么在实例化调用时会自动覆盖父类对应的方法或属性。
如果在被覆盖的方法中,仍想使用父类的方法(只是子类该方法中新加入一些内容),那么可用到两种方法:
- 使用未绑定分父类方法
class A:
def fun(self):
print("父类方法")
class B(A):
def fun(self):
A.fun(self) # 此时的self是B类实例化对象传入,所以说是未绑定的父类方法
print('子类方法')
In[1]: a = A()
In[2]: a.fun()
父类方法
In[3]: b = B()
In[4]: b.fun()
父类方法
子类方法
- 使用super函数
不用定义基类的名字,如果有多重继承,它可以自动找出一层层基类对应的方法。
这样如果要改变子类的话,就不用像上一种方法一样,改变所有父类的名字了
class A:
def fun(self):
print("父类方法")
class B(A):
def fun(self):
super().fun()
print('子类方法')
多重继承
class DerivedClassName(Base1,Base2,Base3):
组合
把横向关系的类放到一起(没有继承关系)
*还有点没弄清楚
类、类对象和实例对象
- 类对象原有属性A,如果将实例对象的属性A重新赋值,那么在该实例对象的属性中,属性A的新值会覆盖原有值,即使类对象的属性A重新赋值了,该实例对象的属性A的值还是不变。
- 属性和方法不能用相同的名字,不然属性会覆盖方法。
- 类中不要定义太多属性和方法,多利用组合和继承机制完成。
绑定概念
Python严格要求方法需要在有实例时才能被调用。