
# 猫、狗 都属于动物一类
class Animal:
pass
class cat(Animal):
pass
class Dog(Animal):
pass
多态性指的是在不考虑对象具体类型的情况下直接使用对象,具体来说就是把对象使用的方法统一起来,比如动物都有发出声音的功能,比如下述代码:
class Animal:
def talk(self):
print('动物会发出的声音...')
class Cat(Animal):
def talk(self):
super().talk()
print('喵喵')
class Dog(Animal):
def talk(self):
super().talk()
print('汪汪')
# 产生对象
cat = Cat()
dog = Dog()
# 调用方法
cat.talk()
dog.talk()
# 运行结果
动物会发出的声音...
喵喵
动物会发出的声音...
汪汪
多态的本质就是在于不同的类中定义有相同的方法名,可以不考虑类而统一用一种方式去使用对象,python提供了抽象类的概念来硬性限制子类必须有某些方法名。
import abc # 使用抽象类必须导入abc包
# 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
class Animal(metaclass=abc.ABCMeta):
@abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
def talk(self): # 抽象方法中无需实现具体的功能
pass
class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
def talk(self):
pass
cat=Cat() # 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化
# 像什么就是什么,就具有什么功能
class Cpu:
def read(self):
print('cpu read')
def write(self):
print('cpu write')
class Memory:
def read(self):
print('mem read')
def write(self):
print('mem write')
obj1=Cpu()
obj2=Mem()
obj1.read()
obj1.write()
obj2.read()
obj2.write()
转载请注明:XAMPP中文组官网 » python面向对象三大特性详解3-封装&继承&多态