Day30.多态和鸭子类型

1.多态和鸭子类型_为何要有多态和多态流程说明

# todo  2. 为何要有多态==》 多态会带来什么样的特性,多态性
# todo      多态性指的是可以在不考虑对象具体类型的情况下,而直接使用对象
class Animal:   # ? 父类做了统一子类的方法
    def say(self):
        print('动物基本的发声频率。。。', end=' ')

class People(Animal):
    def say(self):
        super().say()
        print('')

class Dog(Animal):
    def say(self):
        super().say()
        print('')

class Pig(Animal):
    def say(self):
        super().say()
        print('')

obj1 = People()
obj2 = Dog()
obj3 = Pig()

# todo 说明:obj1进入类People,类People下存在say函数,进入say函数下执行,执行super.say()进入类People继承的父类,
# todo      并调用父类下的say()方法,打印父类下的`动物基本的发声频率。。。`, 然后再打印类People下的`嘤`
# todo 流程:类People下的say()方法----->super.say()进入父类Animal调用其下的say()方法----->打印父类Animal
# todo      中say()下的内容`动物基本的发声频率。。。`-----> 最后打印类People()中say()方法下的打印内容`嘤`
# obj1.say()
# obj2.say()
# obj3.say()

# todo 根据对象,定义统一的接口,接收传入的动物对象
def animal_say(animal):
    animal.say()

print('\n', '根据对象,定义统一的接口,接收传入的动物对象'.center(40, '='))
animal_say(obj1)
animal_say(obj2)
animal_say(obj3)

2.多态和鸭子类型_len方法统一接口方法

# todo len方法统一接口
print('len方法非统一接口'.center(40, '-'))
print('hello'.__len__())
print([1, 2, 3].__len__())
print({'a':1, 'b':2}.__len__())
print('')

def my_len(val):
    return val.__len__()

print('len方法统一接口'.center(40, '-'))
print(my_len('hello'))
print(my_len([1, 2, 3]))
print(my_len({'a':1, 'b':2}))

3.多态和鸭子类型_鸭子类型是让毫无相关性的类,做的像一点

# todo python推崇的是鸭子类型, 让毫无相关性的类,做的像一点
class Cpu:
    def read(self):
        print('cpu read')

    def write(self):
        print('cpu write')

class Mem:
    def read(self):
        print('mem read')

    def write(self):
        print('mem write')

class Txt:
    def read(self):
        print('txt read')
    
    def write(self):
        print('txt write')

obj1 = Cpu()
obj2 = Mem()
obj3 = Txt()

obj1.read()
obj1.write()

obj2.read()
obj2.write()

obj3.read()
obj3.write()

 

posted on 2024-06-27 13:28  与太阳肩并肩  阅读(4)  评论(0编辑  收藏  举报

导航