@classmethod 是否与 python 中的 __init__ 方法一起工作?
does the @classmethod work together with the __init__ method in python?
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__
吗?
如果写成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__
。这是错误还是功能取决于您。
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__
吗?
如果写成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__
。这是错误还是功能取决于您。