面向对象语言的三大特征:继承,封装,多态。那么在python的语言中我们不太用的到封装和多态,所以本文主要分享一下关于自己在学习python的过程中对继承方法的理解及使用。
-
继承方法
-
如果子类没有定义自己的初始化函数,父类的初始化函数会被默认调用;但是如果要实例化子类的对象,则只能传入父类的初始化函数对应的参数,否则会出错。
-
如果子类定义了自己的初始化函数,而在子类中没有显示调用父类的初始化函数,则父类的属性不会被初始化
-
如果子类定义了自己的初始化函数,在子类中显示调用父类,子类和父类的属性都会被初始化
-
如果子类的方法与父类对应的方法有不同的操作逻辑,则这时需要在子类方法中重写父类的方法。
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)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114928.html