1.鸭子类型
鸭子类型是一种和动态语言有关的概念,它强调调用实例方法时,不检查参数类型,只要方法存在,参数正确,就可以调用。鸭子类型来自于一则寓言,“只要它走路起来像鸭子,叫起来像鸭子,那么它就可以被看做鸭子。”
接下来,通过代码的方式帮助大家理解:
a = [1,2] # 列表类型
b = [2,3] # 列表类型
c = (5,6) # 元组类型
d = "avd" # 字符串类型
a.extend(b)
print(a) # [1, 2, 2, 3]
a = [1,2]
a.extend(c)# extend()扩展方法
print(a) # [1, 2, 5, 6]
a = [1,2]
a.extend(d)
print(a) # [1, 2, 'a', 'v', 'd']
# 列表的extend方法添加iterable类型的数据
# 字符串、列表、元组都是可迭代对象,所以可以当做extend方法的参数
列表的extend方法参数为Iterable对象,因此再调用extend方法时,只要参数是可迭代对象,就可以调用,而不用去管参数的具体类型,是列表、元组还是字符串。
2.多态
多态一词的含义是多种形态,在编程语言中,指可以在许多对象上执行同名函数、方法或运算符。
2.1 函数多态性
x = "Hello World!"
print(len(x))
mytuple = ("apple", "banana", "cherry")
print(len(mytuple))
thisdict = {
"brand": "Ford",
"year": 2023
}
print(len(thisdict))
2.2 类多态性
多态经常体现在类方法中,当多个类包括同名方法时,就体现了多态。
class Cat(object):
def info(self):
print("i am cat")
class Dog(object):
def info(self):
print("i am dog")
class Duck(object):
def info(self):
print("i am duck")
animal_list = [Cat, Dog, Duck] # 变量
for animal in animal_list:
animal().info()
# i am cat
# i am dog
# i am duck
3.总结
在编程语言中,鸭子类型和多态并不总是同时出现,比如Java,有多态性,但没有鸭子类型,当然,还有一些编程语言,同时出现了鸭子类型和多态,比如Python。