python24面向对象 继承,封装,多态

继承

继承仍以父类为主,子类作为修改或补充

'''
继承
'''
class Animal:
    def __init__(self,name,aggr,hp):
        self.name=name
        self.aggr=aggr
        self.hp=hp

class Dog(Animal):
    def bite(self,person):
        person.hp-=person


jin=Dog('',200,500)
print(jin.name)

 

派生

'''
继承
派生:就是比父类多出来的属性或方法叫派生属性派生方法,优先使用子类的方法
'''
class Animal:
    def __init__(self,name,aggr,hp):
        self.name=name
        self.aggr=aggr
        self.hp=hp

class Dog(Animal):
    def __init__(self,name,aggr,hp,kind):
        Animal.__init__(self,name,aggr,hp)
        self.kind=kind#派生属性

    def bite(self,person):
        person.hp-=person


jin=Dog('',200,500,222)
print(jin.kind)

 

 

'''
继承
派生:就是比父类多出来的属性或方法
'''
# 父类中没有的属性 在子类中出现 叫做派生属性
# 父类中没有的方法 在子类中出现 叫做派生方法
# 只要是子类的对象调用,子类中有的名字 一定用子类的,子类中没有才找父类的,如果父类也没有报错
# 如果父类 子类都有 用子类的
    # 如果还想用父类的,单独调用父类的:
    #       父类名.方法名 需要自己传self参数
    #       super().方法名 不需要自己传self
# 正常的代码中 单继承 === 减少了代码的重复
# 继承表达的是一种 子类是父类的关系
class Animal:
    def __init__(self,name,aggr,hp):
        self.name = name
        self.aggr = aggr
        self.hp = hp
    def eat(self):
        print('吃药回血')
        self.hp+=100

class Dog(Animal):
    def __init__(self,name,aggr,hp,kind):
        super().__init__(name,aggr,hp)  # 只在新式类中有,python3中所有类都是新式类
        self.kind = kind       # 派生属性
    def eat(self):print('dog eating')

jin = Dog('金老板',200,500,'teddy')
print(jin.name)
jin.eat()
super(Dog,jin).eat()

 

钻石继承

 

 

'''
继承顺序:就近原则
以实际测试为准 钻石继承
''' 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(C,B): def func1(self): print('D') d=D() d.func() ''' 结果: C '''
#打印继承书序
print(D.mro())
 

 

 

多继承

 

 

封装

 

 

多态

posted @ 2019-05-22 22:10  jiuchen  阅读(79)  评论(0编辑  收藏  举报