首页 > 编程语言 >python中的类继承

python中的类继承

时间:2023-02-19 20:24:00浏览次数:39  
标签:python self 继承 func print 父类 class def

"""

"""
class Animal(object):
    def __init__(self,name,food):
        self.name = name
        self.food = food
        self.blood = 100
        self.waise = 100
    def eat(self):
        print(f"{self.name} eating {self.food}")
    def drink(self):
        print("hhh")
    def sleep(self):
        print("sss")

class Cat(Animal):
    def eat(self):
        self.blood += 100
        Animal.eat(self)
    def pashu(self):
        print("pashu")

class Dog(Animal):
    def eat(self):
        self.waise += 100
        Animal.eat(self)
    def kanjia(self):
        print("kanjia")
c = Cat("小白","猫粮")
c.eat()
print(c.__dict__)

"""
父类和子类方法的选择
    子类的对象,如果去调用方法
    永远先优先调用自己
        如果自己有 用自己的
        如果自己没有 用父类的
        如果自己有还想用父类的:直接在子类方法中调用父类的方法 父类名.方法名(self)
"""

class Foo(object):
    def __init__(self):
        self.func()     #在每一个self调用func时,我们不看这句话在哪里执行,只看self是谁
    def func(self):
        print("in foo")
class Son(Foo):
    def func(self):
        print("in son")

Son()


"""
多继承
"""
class A():
    def func(self):
        print("A")
class B(A):
    def func(self):
        print("B")
class C(A):
    def func(self):
        print("C")
class D(B,C):
    def func(self):
        print("D")

d = D()
d.func()
#在python3中总是广度优先走
#在python2中经典类总是深度优先走   在python2中新式类:括号里继承object     经典类:括号里没有object

"""
c3算法
A(O) = [AO]
B(A) = [BAO]
C(A) = [CAO]
D(B) = [DBAO]
E(C) = [ECAO]

F(D,E) = c3(D(B) + E(C))
        = [F] + [DBAO] + [ECAO]
    F = [DBAO] + [ECAO]
    FD = [BAO] + [ECAO]
    FDB = [AO] + [ECAO]
    FDBE = [AO] + [CAO]
    FDBEC = [AO] + [AO]
    FDBECA = [O] + [O]
    FDBECAO
    
算法内容
    如果是单继承 那么总是按照从子类-》父类的顺序来计算查找顺序
    如果是多继承,需要按照自己本类,父类1,父类2的继承顺序
    merge规则:
        如果一个类出现在从左到右所有顺序的最左侧,并且没有在其他位置出现,那么先提出来作为继承顺序中的一个
        或者一个类出现在从左到右顺序的最左侧,并没有在其他顺序中出现,那么先提出来作为继承顺序中的一个
        如果从左到右第一个顺序中的第一个类出现在后面且不是第一个,那么不能提取,顺序向后继续找其他顺序中符合上述条件的类


经典类-深度优先    新式类-广度优先
深度优先自己看
广度优先遵循c3算法,会用mro,会查看顺序
经典类没有mro,新式类有
"""

 

标签:python,self,继承,func,print,父类,class,def
From: https://www.cnblogs.com/moon3496694/p/17135473.html

相关文章

  • python中的数据模型
    参考:https://docs.python.org/zh-cn/3/reference/datamodel.html1. 对象、值与类型对象 是Python中对数据的抽象。Python程序中的所有数据都是由对象或对象间关系......
  • 【Python】爬虫-Xpath
    Xpath文章参考:https://www.cnblogs.com/mxjhaima/p/13775844.html#案例安装pipinstalllxml引用fromlxmlimportetree获取文档树对象通过Xpath获取文档的......
  • python方法、类方法和静态方法的区别
    classA:deff1():passdeff2(self):pass@classmethoddeff3(cls):pass@staticmethoddeff4():pass......
  • 【Python】Python实现提前查询考研成绩
    ✨Python实现提前查询考研成绩自命题院校可能会在考研成绩正式发布之前将成绩上传到研招网,并进行测试此时就可以提前查询到专业课成绩✨使用说明填写相关信息使用时......
  • python requests 最牛攻略
    目录安装ReuqestsHTTP简介什么是HTTPHTTP工作原理HTTP的9种请求方法HTTP状态码requests快速上手requests发起请求的步骤requests发起请求的两种方式请求参数发起GET......
  • Python报错TypeError: 'NoneType' object is not callable
    Python报错TypeError:'NoneType'objectisnotcallable 保存内容如下  检查src文件后没有发现问题,最终在公共方法找到原因注释掉return了,取消后问题解决 ......
  • 简单的python格网算法算数据密集度demo
    #格网算法计算数据集区域数据密集度importtimeimportrandomimportnumpyasnpimportpandasaspd#模拟数据集defcreate_data():data_x=[]data_y......
  • python代码规范PEP8
    1、引言本文档给出了Python编码规约,主要Python发行版中的标准库即遵守该规约。对于C代码风格的Python程序,请参阅配套的C代码风格指南。本文档和PEP257(文档字......
  • 跟着廖雪峰学python 005
    ​ 函数的调用、定义、参数 ​编辑 #######命名关键字参数没完abs()函数:绝对值>>>abs(100)100>>>abs(-20)20max()函数:接收任意多个参数,并返回最大的那个......
  • 使用python批量转换.jfif文件为.jpg
    python代码如下,有需要的自行取用:需要引入Image库,方法是:pipinstallImage importosfromPILimportImageroot_dir=r'C:\temp'deflist_files(root_dir):......