Skip to main content
 首页 » 编程设计

python之在 python 中重载构造函数的更好方法

2025年05月04日16zlslch

所以我知道类方法可用于“重载”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) 

我真的必须为类方法中的每个数据成员列出一个值,只是为了使用类方法创建类的实例吗?此外,我计划稍后向该类添加更多数据成员,但我不喜欢这个笨拙的 init 函数和大约 15 个参数。有没有更好的方法来解决这个问题?

请您参考如下方法:

您可以为参数使用默认值。然后您可以指定要替换哪一个。

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)