码迷,mamicode.com
首页 > 编程语言 > 详细

python面向对象(类的继承)

时间:2018-03-07 21:36:43      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:模块   重复   super   dog   log   深度优先 广度优先   name   div   gpo   

一. 继承的初识

在python3中 所有的类都继承自object

class ParentClass1: pass
class ParentClass2: pass

class ChildClass(ParentClass1):pass     #单继承
class ChildClass1(ParentClass1,ParentClass2):pass     #多继承

print(ParentClass1.__base__)
print(ChildClass.__base__)       #会显示该类的一个父类
print(ChildClass1.__base__)
print(ChildClass.__bases__)
print(ChildClass1.__bases__)    #会显示该类的所有父类

二. 人狗大战

class Animal:
    def __init__(self,name,aggr,hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp
    def eat(self):
        print(in Animal)

class Person(Animal):
    def __init__(self,name,sex,aggr,hp):
        self.sex = sex
        # Animal.__init__(self,name,aggr,hp)
        super().__init__(name,aggr,hp)
    def attack(self,dog):
        print(%s打了%s%(self.name,dog.name))
        dog.hp -= self.aggr
        print(dog.hp)
    def eat(self):
        print(in Person)
        # Animal.eat(self)
        # super().eat()

class Dog(Animal):
    def __init__(self,name,kind,aggr,hp):
        self.sex = kind
        # Animal.__init__(self, name, aggr, hp)
        super().__init__(name,aggr,hp)
    def bite(self, person):
        print(%s咬了%s%(self.name, person.name))
        person.hp -= self.aggr
        print(person.hp)

alex = Person(alex,felame,1,250)
hei = Dog(小黑,teddy,260,10000)

alex.attack(hei)
hei.bite(alex)
# alex.eat()
Person.eat(alex)
Animal.eat(alex)
super(Person,alex).eat()

三. 单继承

不要发生循环继承
依赖倒置原则 :
高层模块不应该依赖低层模块

class A:
    def wahaha(self):print(in A)

class B(A):
    def wahaha(self):print(in B)

class C(B):
    def wahaha(self):print(in C)

class D(C):
    def wahaha(self):print(in D)

d = D()
d.wahaha()

三. 多继承及钻石继承

python3中的所有类 都默认继承object

如果一个类 继承了object 这个类就被称为新式类
没有继承object类 就被称为经典类

深度优先 广度优先 都是一种遍历算法,把这个图中所有的项都走一遍,且不会重复

经典类 遵循 深度优先算法 且没有mro方法 python2
新式类 遵循 广度优先算法 有mro方法 py2 py3
py3 super
单继承中 super就是找父类
多继承 super寻找的轨迹是根据mro(广度优先)顺序的

class A:
    def wangwang(self):
        print(in A)
class B(A):
    def wangwang(self):
        super().wangwang()    # ‘in C ‘
        print(in B)
class C(A):
    def wangwang(self):
        print(in C)
class D(B,C):pass

d = D()
d.wangwang()

 

python面向对象(类的继承)

标签:模块   重复   super   dog   log   深度优先 广度优先   name   div   gpo   

原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8524905.html

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