python面向对象之多态 1.什么是Python中的多态在Python中,由于在定义变量时没有指定类型,类似弱类型语言,而对于弱类型的语言来说,在定义变量时并没有声明变量的类型,因此同一个变量可以在不同的地方引用不同的对象,因此,同一个变量在引用不同对象时在调用同一个方法时,可以呈现出不同的行为,具体呈现出哪一种行为完全由变量所引用的对象所决定,这就是多态。也是面向对象编程的三大特征之一。 2.Python中让你吃惊的多态?在讲解Python中的多态时,好多人都会觉得不可思议,原来自己一直在使用多态,而自己却毫无察觉,下面来看一个例子: class Cat: def say(self): print(f'我是喵星人, 我只喜欢喵喵叫')class Dog: def say(self): print(f'我是汪星人, 我喜欢汪汪照叫')# 定义变量x为Cat的实例x = Cat()# 调用x的say()方法x.say() # 我是喵星人, 我只喜欢喵喵叫# 将Dog()的实例的地址赋值给xx = Dog()# 调用x的say()方法x.say() # 我是汪星人, 我喜欢汪汪照叫 从上面的代码示例可知,同一个变量x在执行同一个方法say()时,由于在不同时间x指向的对象不同,因此呈现出了不同的行为,这就是多态,是不是看起来非常不可思议,也许你会感到非常失望,这种多态有什么用啊? 事实上,在Python中,多态是一种非常灵活的编程机制,下面来看另外一个例子。 3.Python中多态的“真正”用途假如我有一个工厂来生产各种手机配件的,比如有充电宝、耳机、手机支架、手机膜等。
class PowerBank: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生产充电宝')class HeadPhone: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生产耳机')class ScreenProtector: def __init__(self, name): self.name=name def produce(self,factory): print(f'在 {factory} 生产手机膜')# 实例化工厂factory = Factory('华强北手机配置生产厂')factory.make_accessory(PowerBank('华为充电宝'))factory.make_accessory(HeadPhone('Oppo充电蓝牙耳机'))factory.make_accessory(HeadPhone('手机膜')) 结果 从上面的例子可以体会到Python的多态的优势,这种通过参数的动态引用来调用引用后的对象中的方法非常灵活,动态改变后传入的对象只要具有指定的方法就行,至于该方法体现什么样的行为,则完全取决于传入对象本身。 |
|