python面向对象-继承(基础)

继承

面向对象编程中,类的继承是一个很重要的概念。

类(子类)可以继承另一个类(父类),子类就 继承 父类的 非私有 属性 和 非私有 方法

类比

有很多继承的例子,如父子之间的继承:

王健林拥有财富、产业、权利、职务等,王思聪作为继承人,可以拥有王健林的财富、产业

继承的好处 vs 不继承的缺点

例子

定义 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号')

错误如下:

解决

在子类 Wsc 的 __init__() 方法中,调用父类的 __init__() 方法

def __init__(self, gf):
    # Wjl.__init__() 或者下行代码
    super().__init__()
    self.gf = gf
    print("Wsc的__init__()方法")

原文出处:/show_1IX7jGAAEgq4.html