栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python面向对象学习笔记】继承

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python面向对象学习笔记】继承

继承
# 继承
class Animal:
    atype="哺乳动物"
    
    def __init__(self,name,age,sex) -> None:
        self.name=name
        self.age=age
        self.sex=sex

    def eat(self):
        print(f"{self.name} is eating...")

class Person(Animal):
    atype="哺乳高等动物"

    def __init__(self, name, age, sex,hobbie) -> None:
        super().__init__(name, age, sex)
        self.hobbie=hobbie

    def talk(self):
        print(f"[perspn] {self.name} is talking,his hobbie is {self.hobbie}")

    def eat(self): # 重写父类方法
        # Animal.eat(self) # 若想在父类方法的基础上扩充,需要把父类方法先写进来
        super().eat() # 本行代码和上一行代码实现的效果是一样的
        print("人在优雅的吃...") # 在全局调用子类时,会先执行父类方法,再执行子类方法。

class Dog(Animal):
    def chase_rabit(self):
        print("狗在追兔子...")

if __name__=="__main__":
    p=Person("Alex",22,"M","basketball")
    d=Dog("Bob",5,"M")
    p.eat()
    p.talk()
    d.eat()
    print(p.atype)
    print(d.atype)
多继承
# 多继承
class ShenxianBase:
    def fight(self):
        print("神仙始祖们在天界打架...")

class Shenxian:
    """神仙类"""
    def fly(self):
        print("神仙都会飞...")

    # def fight(self):
    #     print("神仙在打架...")

class MonkeyBase:
    def fight(self):
        print("猿猴在打架...")


class Monkey(MonkeyBase):
    """猴子类"""
    def eat(self):
        print("猴子都喜欢吃桃子...")

    def fight(self):
        print("猴子在打架")

# py2.3之前,经典类(class A:)使用深度优先,新式类(class A(object):)使用广度优先
# py3中,经典类和新式类使用的都是广度优先
class MonkeyKing(Shenxian,Monkey): # 同时继承神仙和猴子,当多个父类同时拥有一个名字的实例方法时,(顺序遵循广度优先(第一个子类->...第n个子类->第一个子类的父类->...第n个子类的父类))
    def play_golden_stick(self):
        print("孙悟空在玩金箍棒...")

m=MonkeyKing()
m.fly()
m.eat()
m.play_golden_stick()
m.fight()

多继承继承顺序,C3算法
class A:
    def test(self):
        print("from A")

class B(A):
    def test(self):
        print("from B")

class C(A):
    def test(self):
        print("from C")

class B2:
    def test(self):
        print("from B2")

class C2:
    def test(self):
        print("from C2")

class D(B,B2):
    def test(self):
        print("from D")

class E(C,C2):
    def test(self):
        print("from E")

class F(D,E):
    def test(self):
        print("from F")


if __name__=="__main__":
    f=F()
    f.test()
    print(F.__mro__)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号