所以我知道类方法可以用来超载" python中的init方法,但我遇到了一些问题。比方说,我有一个像这样的构造函数:
def __init__(self, serviceName, endpoint, exportedInterface, exportedObject, remoteObjectInterface, remoteObjectProxy,
interruptionHandler, invalidationHandler):
self._serviceName = serviceName;
#etc.
@classmethod
def createConnection(cls, serviceName):
return cls(serviceName, None, None, None, None, None, None, None)
我是否真的必须为类方法中的每个数据成员列出一个值,只是用类方法创建类的实例?此外,我计划稍后向该类添加更多数据成员,但是我不喜欢使用15个参数来拥有这个难以处理的初始化函数。有没有更好的方法来解决这个问题?
答案 0 :(得分:6)
您可以使用参数的默认值。然后,您可以指定要替换的那个。
def __init__(self, serviceName, endpoint = None, exportedInterface = None,
exportedObject = None, remoteObjectInterface = None, remoteObjectProxy = None,
interruptionHandler = None, invalidationHandler = None):
self._serviceName = serviceName;
#etc.
@classmethod
def createConnection(cls, serviceName):
return cls(serviceName)
现在你只能设置这样的一些参数(另一个会使用它们的默认值):
@classmethod
def createConnectionWithInterruptionHandler(cls, serviceName, interruptionHandler):
return cls(serviceName, interruptionHandler=interruptionHandler)
答案 1 :(得分:0)
有两个选项:
使用关键字参数。 e.g。
def __init__(self, **kwargs):
for names in ("serviceName", ...):
setattr(self, "_" + name, kwargs.get(names, None))
让__init__
做到最低限度并使用工厂函数进行适当的初始化
def __init__(self): pass
@classmethod
def createConnection(cls, serviceName):
foo = cls()
foo._serviceName = serviceName
return foo