以下python代码是否有效?
class Test:
def __init__(self):
self.number = 5
def returnTest(self):
return Test()
Run Code Online (Sandbox Code Playgroud)
Nou*_*him 19
是的,它是有效的.该类由您创建对象并调用该returnTest方法的时间定义.
In [2]: x = Test()
In [3]: y = x.returnTest()
In [4]: y
Out[4]: <__main__.Test instance at 0x1e36ef0>
In [5]:
Run Code Online (Sandbox Code Playgroud)
但是,如果方法的行为类似于工厂,您可能需要考虑使用classmethod装饰器.当继承和其他烦恼出现时,这可能会有所帮助.
当使用子类时,我建议使用更像这样的东西:
return type(self)(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
这确保了返回的类型与返回它的类相同。
这是一个完整的示例:
class Test():
def __init__(self):
self.number = 5
def returnTest(self):
return type(self)()
class SubTest(Test):
def __init__(self):
super().__init__()
self.number = 6
t1 = Test()
t2 = SubTest()
print( type(t1.returnTest()), type(t2.returnTest()) )
Run Code Online (Sandbox Code Playgroud)
输出:
<class '__main__.Test'> <class '__main__.SubTest'>
Run Code Online (Sandbox Code Playgroud)