所以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