一:什么是多态
同一事物有多种形态
二:为何要有多态 ==> 多态会带来什么样的特性,多态性
多态性指的是:可以在不考虑对象的具体类型情况下 直接使用对象
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()
# obj1.say() # 动物基本的发声...卧槽
# obj2.say() # 动物基本的发声...汪汪汪
# obj3.say() # 动物基本的发声...吼吼吼
# 定义统一的接口,接收传入的动物对象
def animal_say(animal):
animal.say()
animal_say(obj1)
animal_say(obj2)
animal_say(obj3)
Python中len的精妙之处
# len('hello')
# len([1, 2, 3])
# len({'name': 'xxq', 'age': 18})
# print('hello'.__len__())
# print([1, 2, 3].__len__())
# print({'name': 'xxq', 'age': 18}.__len__())
def my_len(val):
return val.__len__()
print(my_len('hello'))
print(my_len([1, 2, 3]))
print(my_len({'name': 'xxq', 'age': 18}))
三:鸭子类型
# 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()
obj2.read()
obj3.read()
四:了解知识点
import abc
# 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
class Animal(metaclass=abc.ABCMeta): # 统一所有子类的方法
@abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
def say(self):
print('动物基本的发声...', end='')
class People(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
pass
class Dog(Animal):
pass
class Pig(Animal):
pass
obj1 = People()
obj2 = Dog()
obj3 = Pig()
obj1.say() # 动物基本的发声...卧槽
obj2.say() # 动物基本的发声...汪汪汪
obj3.say() # 动物基本的发声...吼吼吼
# 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化
# TypeError: Can't instantiate abstract class People with abstract methods say
class Animal(metaclass=abc.ABCMeta): # 统一所有子类的方法
@abc.abstractmethod
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()
obj1.say() # 动物基本的发声...卧槽
obj2.say() # 动物基本的发声...汪汪汪
obj3.say() # 动物基本的发声...吼吼吼