小甲鱼——类和对象P3-P4

子类继承父类的方法
决定一个类是不是子类在于括号中是否有父类名。
如果子类定义与父类同名的方法或属性,那么在实例化调用时会自动覆盖父类对应的方法或属性。
如果在被覆盖的方法中,仍想使用父类的方法(只是子类该方法中新加入一些内容),那么可用到两种方法:

  • 使用未绑定分父类方法
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严格要求方法需要在有实例时才能被调用。

你可能感兴趣的:(小甲鱼——类和对象P3-P4)