python面向对象-继承(基础) 作者:马育民 • 2024-05-21 09:38 • 阅读:10013 # 继承 面向对象编程中,类的继承是一个很重要的概念。 类(子类)可以继承另一个类(父类),子类就 **继承** 父类的 **非私有 属性** 和 **非私有 方法** ### 类比 有很多继承的例子,如父子之间的继承: [![](http://www.malaoshi.top//upload/0/0/1EF2DIGOmpQd.png)](http://www.malaoshi.top//upload/0/0/1EF2DIGOmpQd.png) 王健林拥有财富、产业、权利、职务等,王思聪作为继承人,可以拥有王健林的财富、产业 ### 继承的好处 vs 不继承的缺点 [![](/upload/0/0/1IX7jG2Qen2e.png)](/upload/0/0/1IX7jG2Qen2e.png) # 例子 ### 定义 Wjl 父类 ``` class Wjl: def __init__(self): self.money = 100 print("Wjl的__init__()方法") def touZi(self,name,money): # print("投资",name,money,'亿,收益:', money * 2, '亿') print(f"投资{name},{money}亿,收益{money*2}亿") # 资产 + 投资收益 self.money += money * 2 ``` 使用: ``` wjl = Wjl() print("王健林的资产:", wjl.money,"亿") wjl.touZi('净月小区', 10) print("王健林的资产:", wjl.money,"亿") ``` # 子类继承父类的格式 python中子类继承父类,代码格式如下: ``` class 子类类名(父类类名): pass ``` ### 定义 Wsc 子类 ``` class Wsc (Wjl): pass ``` 使用: ``` wsc = Wsc() print("王思聪的资产:",wsc.money,"亿") #子类继承父类的属性 wsc.touZi("三只羊文化传媒智商有限公司", 30) # 子类可以继承父类的方法 print("王思聪的资产:",wsc.money,"亿") ``` ### 总结 - 如果子类没有定义 `__init__()` 方法,创建子类对象,**自动调用父类的 `__init__()` 方法**,初始化属性 - 继承最大的好处:**代码重用(重复使用)**,就是子类拥有父类的 `非私有属性` 和 `非私有方法` 。子类 `WangSiCong` 什么也没做,就拥有父类的属性和方法 # 扩展父类的方法 在 `Wsc` 类中增加 `buy()` 方法,可以各种买买买 ``` class Wsc (Wjl): def buy(self,name,money): # 扩展父类的方法 print(f"花{money}亿买{name}") self.money = self.money - money ``` 调用: ``` wsc = Wsc() print("王思聪的资产:",wsc.money,"亿") #子类继承父类的属性 wsc.touZi("三只羊文化传媒智商有限公司", 30) # 子类可以继承父类的方法 print("王思聪的资产:",wsc.money,"亿") wsc.buy("大游艇", 5) print("王思聪的资产:",wsc.money,"亿") ``` # 扩展父类的属性 子类 `Wsc` 增加 `__init__()` 构造方法,定义属性 `gf`,如下: ``` class Wsc (Wjl): def __init__(self, gf): self.gf = gf print("Wsc的__init__()方法") def buy(self,name,money): # 扩展父类的方法 print(f"花{money}亿买{name}") self.money = self.money - money ``` 创建对象 **报错**: ``` wsc = Wsc('网红1号') ``` 错误如下: [![](/upload/0/0/1IX7jGfoMib3.png)](/upload/0/0/1IX7jGfoMib3.png) ### 解决 在子类 `Wsc` 的 `__init__()` 方法中,调用父类的 `__init__()` 方法 ``` def __init__(self, gf): # Wjl.__init__() 或者下行代码 super().__init__() self.gf = gf print("Wsc的__init__()方法") ``` 原文出处:http://malaoshi.top/show_1IX7jGAAEgq4.html