1. 通俗解释:
之所以叫鸭子类型,是因为对于一个object来讲,如果它长得像鸭子,走路像鸭子,颜色像鸭子,那么你就可以把他当成一只鸭子
2. 在object oriental 里面的定义:
Duck Typing 更强调一个object的特征(变量,方法等)而不管它的遗传(inherit)关系
举个例子:
在这里有两个class,一个是GameCharacter,一个是Trap
他们在一定程度上有相同点,但会有一些不同的地方,而且Trap不是继承于GameCharacter的
from abc import abstractmethod
from argparse import Action
from sqlalchemy import false, true
class GameCharacter:
def __init__(self, row, col):
self._row = row
self._col = col
self._occupying = None
self._name = None
self._active = True
self._character = None
self._color = "3[1;31m"
#TODO: occupying getter and setter
@property
def occupying(self):
return self._occupying
@occupying.setter
def occupying(self, Cell):
self._occupying = Cell
def cmd_to_pos(self, char):
# Duck Typing
from sqlalchemy import false, true
class Trap:
def __init__(self, row, col):
self._row = row
self._col = col
self._occupying = None
self._name = "Trap"
# TODO: _occupying get and setter
@property
def occupying(self):
return self._occupying
@occupying.setter
def occupying(self,Cell):
self._occupying = Cell
# TODO: _name getter
def get_name(self):
return self._name
def interact_with(self, comer):
...
这个时候就会有人问了:为啥不用继承呢?用重写可以让继承变得多样化
这里就涉及到Duck Typing的优点了:
3. Duck Typing 的优点
众所周知,在python中是不允许继承两个类的(不是接口),那如果一个类需要多个类的特征呢?这里就要用到duck typing了。这样虽然Trap不是继承于GameCharacter,但是它却可以拥有包括GameCharacter在内的其他的类的特征——提高了多样性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)