@classmethod和python中的__init__方法一起工作吗?

时间:2018-03-11 00:19:02

标签: python constructor class-method

from dice import D20


class Hand(list):
    def __init__(self, size=0, die_class=D20, *args, **kwargs):
        super().__init__()
        for _ in range(size):
            self.append(die_class())

    @classmethod
    def roll(cls, size):
        return cls(size)

    @property
    def total(self):
        return sum(self)

如果我使用Hand.roll,其size是否传递给Hand.__init__

1 个答案:

答案 0 :(得分:0)

如果您撰写Hand.roll(4)clsHand且表达式正好为Hand(4)。所以论证就像你期望的那样传递给__init__

但是有人可以写

class Hand1(Hand):  # convenience for one die
  def __init__(self, d=6):
    super(Hand, self).__init__(1, dice.dN(d))

Hand1.roll(20)会将d=20传递给Hand1.__init__。这是一个错误还是一个功能取决于你。