首页 / 更多教程 / 30---面向对象特性---多态
30---面向对象特性---多态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了30---面向对象特性---多态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1421字,纯文字阅读大概需要3分钟。
内容图文
![30---面向对象特性---多态](/upload/InfoBanner/zyjiaocheng/1276/37632cad1d8647d49b8015c75ecfb8d4.jpg)
一 什么是多态
同一类事物具有多种形态
# 猫 狗 都属于动物这一类
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()
# 可以定义一个接口(功能)接收对象
def talk(animal_obj):
animal_obj.talk()
talk(cat)
总结:多态性的本质在于不同的类中定义有相同的方法名
我们就可以不考虑类而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名
import 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,无法实例化
三 鸭子类型
鸭子类型:
但其实我们完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象,这正是Python崇尚的“鸭子类型”(duck typing):“如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子”。比起继承的方式,鸭子类型在某种程度上实现了程序的松耦合度
# 像什么就是什么,就具有什么功能
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()
原文:https://www.cnblogs.com/Kathrine/p/12687273.html
内容总结
以上是互联网集市为您收集整理的30---面向对象特性---多态全部内容,希望文章能够帮你解决30---面向对象特性---多态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。