Duck Typing (鸭子类型)详解

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lobster0722

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值