64 鸭子类型

174次阅读
没有评论

共计 894 个字符,预计需要花费 3 分钟才能阅读完成。

引入

上一篇我们谈到使用 abs 模块来强制的要求子类必须要有父类中的某些方法才能保证多态, 但这不是 Python 推崇的方法, 下面我们来介绍鸭子类型是如何实现使用多态的

一. 什么是鸭子类型

64 鸭子类型

鸭子类型, 即一个对象看起来像鸭子, 走路像鸭子, 说话也像鸭子, 具备了鸭子的所有特征和行为, 那么我们就可以说这个对象就是的鸭子

二. 为什么推崇鸭子类型

使用鸭子类型, 我们完全可以不依赖继承, 只需要制造出外观和行为相同的对象, 并且可以实现不考虑对象类型的情况下来使用对象

  • 例 : 一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子
  • 例 : 一条狗走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这条狗就可以被称为鸭子 (当然鸭子的特性不止这些)

64 鸭子类型

三. 鸭子类型示例

  • 例一 :
class 看时间:
    def look_time(self):
        print(" 看时间 ")

🍔都没有父类
class Watchs:
    def look_time(self):
        print(" 使用手表看时间 ")

class Phone:
    def look_time(self):
        print(" 使用手机看时间 ")

class Sundial:
    def look_time(self):
        print(" 使用日晷看时间 ")

W1 = Watchs()
P1 = Phone()
S1 = Sundial()

🍔只要 "W1、P1、S1" 他们都有相同的方法 (一个或多个), 我们就可以说他们是属于同一个类 (例: 看时间类), 于是就可以使用多态
W1.look_time()  # 使用手表看时间
P1.look_time()  # 使用手机看时间
S1.look_time()  # 使用日晷看时间
  • 例二 :
🍔我们一直正在使用的多态
s = str('paidaxing')
l = list([1,2,3,4,5])
t = tuple((1,2,3,4))

🍔我们可以在不用考虑 "s,l,t" 的类型下使用 "__len__()" 方法和 "print()" 等等
s.__len__()
l.__len__()
t.__len__()

print(s)
print(l)
print(t)

ps : Python, Go 语言中实现多态可以不需要继承父类, 而其他语言总需要 (例:Java)

正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计894字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)