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__
?
答案 0 :(得分:0)
如果您撰写Hand.roll(4)
,cls
为Hand
且表达式正好为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__
。这是一个错误还是一个功能取决于你。