python中的继承方法

 面向对象语言的三大特征:继承,封装,多态。那么在python的语言中我们不太用的到封装和多态,所以本文主要分享一下关于自己在学习python的过程中对继承方法的理解及使用。

  • 继承方法

  1. 如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。

  2. 如果子类定义了自己的初始化函数,而在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化

  3. 如果子类定义了自己的初始化函数,在子类中显示调用父类,子类和父类的属性都会被初始化

  4. 如果子类的方法与父类对应的方法有不同的操作逻辑,则这时需要在子类方法中重写父类的方法。

 pass为占位,表示目前子类没有私有方法;rc=RichChild(RichMan) 子类会默认调用父类_init_(self,money,company)的方法。实例化子类的对象时,只能传入父类的初始化函数对应的参数,否则父类无法完成初始化。

class RichMan:

    def __init__(self,money,company):
        self.money=money
        self.company=company

    def earnMoney(self,number):
        self.money+=number

    def spendMoney(self,number):
        self.money-=number

    def showMoney(self):
        print('Rich man has:'+str(self.money))


class RichChild(RichMan): #继承RichMan

     pass

rc=RichChild(99999999,20)
print(rc.money)
print(rc.company)

rc.earnMoney(10000)
print(rc.money)

 注意:1.当子类定义了自己的init方法时,务必要先显示调用父类的init方法,否则会报错

             解决办法:手动的去调用父类里的  def __init__(self,money,company):换句话说就是手动的去把父类init方法里面参数加到子类init方法里

            2.当子类中的方法和父类同名的时候,则子类中的该方法会自动覆盖父类中的该方法

class RichChild(RichMan):  # 继续于RichMan

    def __init__(self, money, company):  # 当子类定义了自己的init方法时,务必要先显式调用父类的init方法,否则父类会初始化失败
        super().__init__(money, company)  # 显式调用父类的init方法,确保父类初始化成功

 请参考如下代码进行理解

 
class RichChild(RichMan):  # 继续于RichMan

    def __init__(self, money, company):  # 当子类定义了自己的init方法时,务必要先显式调用父类的init方法,否则父类会初始化失败
        super().__init__(money, company)  # 显式调用父类的init方法,确保父类初始化成功
        self.ownMoney = 0   # 子类自己的账户

    def earnMoney(self, number):  # 子类定义了跟父类中同名的方法,则子类方法会覆盖父类中的方法
        self.ownMoney += number

 
    def showFathersMoney(self):  # 定义一个子类独有的方法
        print('My Father has ', str(self.money))


rc = RichChild(100000000, 8)


rc.showMoney()

rc.showFathersMoney()

rm = RichMan(100000000, 8)
rm.spendMoney(30000)
print(rm.money)

猜你喜欢

转载自blog.csdn.net/wuyomhchang/article/details/123801693