码迷,mamicode.com
首页 > 其他好文 > 详细

继承||派生||继承实现原理

时间:2018-03-17 21:36:31      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:技术分享   sof   init   python   深度优先   str   print   soft   其他   

继承

继承:是类与类之间的关系

class ParentClass1: # 父类,基类,超生类
    pass

class ParentClasss2:
    pass

class SubClass1(ParentClass1): #子类,派生类
    pass

class SubClass2(ParentClass1,ParentClasss2):
    pass

# print(SubClass1.__bases__) #查看所继承的父类
# print(SubClass2.__bases__)

属性查找联系

#在查找属性的时候,显示从对象里面寻找,之后去类中寻找,最后去父类中寻找
class Foo:
    def f1(self):
        print("from Foo.f1")
    def f2(self):
        print("from Foo.f2")
        self.f1() # b.f1()

class Bar(Foo):
    def f1(self):
        print("frm Bar.f1")

b = Bar()
b.f2()

派生

#派生:在查找属性的时候,显示从对象里面寻找,之后去类中寻找,最后去父类中寻找
class Hero:
    def __init__(self,name,damage,zing):
        self.name = name
        self.damage = damage
        self.zing = zing

    def attack(self,enemy):
        enemy.zing -= self.damage

class Yang(Hero):
    def attack(self,enemy):
        print("from Yang Class")
    pass

class Lin(Hero):
    pass

g1 = Yang(杨学伟,10,100)
r1 = Lin(林书行,100,200)
g1.attack(r1)

继承的实现原理

python2中类主要分为两种

  • 新式类
  • 经典类

在python2中经典类:只要没有继承object的类,以及其他的子类都成为经典类

class Foo:
    pass

class Bar(Foo):
    pass

在python2中新式类:只要继承object的类,以及其他的子类都成为新式类

class Foo(object):
    pass

class Bar(Foo):
    pass

python3中的类只有一种新式类

#在python3中=》新式类:一个类没有继承object的类,默认就继承object
class Foo:
    pass
print(Foo.__bases__)

验证多继承下的属性查找

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 D(B):
    def test(self):
        print("from D")

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

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

f = F()
f.test()
#查找的顺序是F-D-B-E-C-A

总结:

经典类的查找属性的方法是深度优先

技术分享图片

新式类的查找属性的方法是广度优先

技术分享图片

 

 

继承||派生||继承实现原理

标签:技术分享   sof   init   python   深度优先   str   print   soft   其他   

原文地址:https://www.cnblogs.com/Mryang123/p/8592534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!