Python __init__和classmethod,他们必须具有相同数量的args吗?

所以classmethods可以在
python中用作替代“构造函数”,它们绑定到类而不是实例,到目前为止非常清楚.但我的问题是,如果必须在返回的类方法实例中使用与init中相同数量的参数.更确切地说:

class MyClass(object):
  def __init__(self,name):
     self.name=name
  @classmethod
  def alternative_init(cls,name,surname):
      return cls(name,surname)

如果我尝试创建一个实例Myclass(“alex”)工作正常,但如果我尝试创建一个实例Myclass.alternative_init(“alex”,“james”)我有一个TypeError,因为我传递给许多参数,并且init只需2.我错过了什么吗?

最佳答案 __init__只接受一个参数,即名称.因此,您可以将名称或姓氏传递给cls,但不能同时传递给两者.但是,您可以在classmethod中创建一个类实例,并添加一个额外的参数:

class MyClass(object):
  def __init__(self,name):
    self.name=name
  def __setattr__(self, name, val):
     self.__dict__[name] = val
  @classmethod
  def alternative_init(cls,name,surname):
    v = cls(name)
    v.surname = surname
    return v
点赞