@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__。这是错误还是功能取决于您。