Python 中的重载构造函数点?
Point of overloaded constructor in Python?
我无法准确理解这段代码的用途
class buildArgs:
def __init__(self, host, port, user, dept):
self._dept = dept
self._host = host
self._port = port
self._user = user
self._datacenter = datacenter
self._path = path
def __init__(self):
self._dept = None
self._host = None
self._port = None
self._user = None
self._datacenter = None
self._path = None
然后是一堆 @属性 方法,然后是像这样的设置器,然后是主要方法:
@property
def port(self):
return self._port
@port.setter
def port(self, port):
self._port = port
我以前从未在 Python 中的 class 下看到过两个 __init__
函数,我假设这是非 Python 的。这种逻辑的正确方法是什么?
该代码所做的相当于根本不定义第一个 __init__
(它立即被第二个替换,并且再也见不到)。
您可以通过仅使用第一个构造函数并为所有参数提供默认值 None
:
来获得类似于这两种行为的东西
def __init__(self, host=None, port=None, user=None, dept=None):
self._dept = dept
self._host = host
self._port = port
self._user = user
这也允许提供一些参数,但不是全部。对于更复杂的情况,将备用构造函数定义为 @classmethod
(class 方法主要用于实现备用构造函数),它将自己的参数转换(或提供)为主构造函数所期望的参数,然后以 return cls(expected, arguments, here)
:
结尾
class buildArgs:
def __init__(self, host, port, user, dept):
self._dept = dept
self._host = host
self._port = port
self._user = user
@classmethod
def from_the_void(cls):
return cls(None, None, None, None)
我无法准确理解这段代码的用途
class buildArgs:
def __init__(self, host, port, user, dept):
self._dept = dept
self._host = host
self._port = port
self._user = user
self._datacenter = datacenter
self._path = path
def __init__(self):
self._dept = None
self._host = None
self._port = None
self._user = None
self._datacenter = None
self._path = None
然后是一堆 @属性 方法,然后是像这样的设置器,然后是主要方法:
@property
def port(self):
return self._port
@port.setter
def port(self, port):
self._port = port
我以前从未在 Python 中的 class 下看到过两个 __init__
函数,我假设这是非 Python 的。这种逻辑的正确方法是什么?
该代码所做的相当于根本不定义第一个 __init__
(它立即被第二个替换,并且再也见不到)。
您可以通过仅使用第一个构造函数并为所有参数提供默认值 None
:
def __init__(self, host=None, port=None, user=None, dept=None):
self._dept = dept
self._host = host
self._port = port
self._user = user
这也允许提供一些参数,但不是全部。对于更复杂的情况,将备用构造函数定义为 @classmethod
(class 方法主要用于实现备用构造函数),它将自己的参数转换(或提供)为主构造函数所期望的参数,然后以 return cls(expected, arguments, here)
:
class buildArgs:
def __init__(self, host, port, user, dept):
self._dept = dept
self._host = host
self._port = port
self._user = user
@classmethod
def from_the_void(cls):
return cls(None, None, None, None)