失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Duck Typing (鸭子类型)详解

Duck Typing (鸭子类型)详解

时间:2021-12-12 22:48:03

相关推荐

Duck Typing (鸭子类型)详解

1. 通俗解释:

之所以叫鸭子类型,是因为对于一个object来讲,如果它长得像鸭子,走路像鸭子,颜色像鸭子,那么你就可以把他当成一只鸭子

2. 在object oriental 里面的定义:

Duck Typing 更强调一个object的特征(变量,方法等)而不管它的遗传(inherit)关系

举个例子:

在这里有两个class,一个是GameCharacter,一个是Trap

他们在一定程度上有相同点,但会有一些不同的地方,而且Trap不是继承于GameCharacter的

from abc import abstractmethodfrom argparse import Actionfrom sqlalchemy import false, trueclass GameCharacter:def __init__(self, row, col):self._row = rowself._col = colself._occupying = Noneself._name = Noneself._active = Trueself._character = None self._color = "\033[1;31m"#TODO: occupying getter and setter@propertydef occupying(self):return self._occupying@occupying.setterdef occupying(self, Cell):self._occupying = Celldef cmd_to_pos(self, char):

# Duck Typingfrom sqlalchemy import false, trueclass Trap:def __init__(self, row, col):self._row = rowself._col = colself._occupying = Noneself._name = "Trap"# TODO: _occupying get and setter@propertydef occupying(self):return self._occupying@occupying.setterdef occupying(self,Cell):self._occupying = Cell# TODO: _name getterdef get_name(self):return self._namedef interact_with(self, comer):...

这个时候就会有人问了:为啥不用继承呢?用重写可以让继承变得多样化

这里就涉及到Duck Typing的优点了:

3. Duck Typing 的优点

众所周知,在python中是不允许继承两个类的(不是接口),那如果一个类需要多个类的特征呢?这里就要用到duck typing了。这样虽然Trap不是继承于GameCharacter,但是它却可以拥有包括GameCharacter在内的其他的类的特征——提高了多样性。

如果觉得《Duck Typing (鸭子类型)详解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。