python3(二十四) subClas

""" 继承的多态 """
__author__ = 'shaozhiqi'


# -----------------父类------------------------
class Animal(object):
    def run(self):
        print('Animal is running...')


# -----------------子类------------------------
class Dog(Animal):
    pass


# ------------------子类----------------------------------------
class Cat(Animal):
    pass


# -------------------子类实例-------------------------------------
dog = Dog()
dog.run()  # Animal is running...

cat = Cat()
cat.run()  # Animal is running...


# --------------------重新定义dog 有自己的run方法-------------------
class Dog(Animal):

    def run(self):
        print('Dog is running...')

    def eat(self):
        print('Dog eating meat...')


dog = Dog()
dog.run()  # Dog is running...
dog.eat()  # Dog eating meat...
# 当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),在代码运行的时候,总是会调用子类的run()。
# 这样,我们就获得了继承的另一个好处:多态。
# 子类,那它的数据类型也可以被看做是父类。但是,反过来就不行:
print(isinstance(dog, Dog))  # True
print(isinstance(dog, Animal))  # True
a = Animal()
print(isinstance(a, Dog))  # False


# -----------------------------适配----------------------------------
def run_selfrun(animal):
    animal.run()


run_selfrun(a)  # Animal is running...
run_selfrun(dog)  # Dog is running...
# 新增一个Animal的子类,run_selfrun()不需要对做任何修改,这种方法在业务中就可以向上提取,
# 实际上,任何依赖Animal作为参数的函数或者方法都可以不加修改地正常运行,原因就在于多态。

# 开闭原则:
# 对扩展开放:允许新增Animal子类;
# 对修改封闭:不需要修改依赖Animal类型的run_selfrun()等函数。

 

转载于:https://www.cnblogs.com/shaozhiqi/p/11550436.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值