Duck Typing

Duck Typing ,第1张

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在内的其他的类的特征——提高了多样性。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存