什么是鸭子类型?
class Duck:
def say(self):
print('I am a duck')
class Cat:
def say(self):
print('I am a cat')
class Dog:
def say(self):
print('I am a dog')
animal = Cat
animal().say()
Java 中实现多态,需要继承父类,并覆盖父类中的方法。
Python 中实现多态,不需要继承任何东西,只需要实现共同的方法名就行了。比如上面代码中,三个类共同实现了同一个方法,而且名称一样,那么这些类可以归为一种类型,这样的话在调用的时候便可以同时调用它们的say()
方法。以此就达到了多态的效果。
animal_lst = [Duck, Cat, Dog]
for animal in animal_lst:
animal().say()
>>>
输出:
I am a cat
I am a duck
I am a cat
I am a dog
得益于 Python 的动态性,这一切的实现变得特别的简单,不需要继承和实现任何东西。
比如列表 (list) 的方法extend()
对于其他 iterable 类型都可以。
def extend(iterable)
L.extend(iterable) -> None -- extend list by appending elements from the iterable
a = ['s','c','p']
b = ['r','e','w']
named_tuple = set()
named_tuple.add('q')
named_tuple.add('z')
named_tuple.add('o')
a.extend(b)
print(a)
a.extend(named_tuple)
print(a)
>>>
['s', 'c', 'p', 'r', 'e', 'w']
['s', 'c', 'p', 'r', 'e', 'w', 'q', 'z', 'o']
类中若实现了__getitem__ 方法,其实例化的对象就可以变成可迭代对象
网友评论