python类能否返回其类的新实例?

python类能否返回其类的新实例?,python,class,Python,Class,以下python代码有效吗 class Test: def __init__(self): self.number = 5 def returnTest(self): return Test() 是的,它是有效的。该类是在创建对象并调用returnTest方法时定义的 In [2]: x = Test() In [3]: y = x.returnTest() In [4]: y Out[4]: <__main__.Test instance at 0x1e3

以下python代码有效吗

class Test:
  def __init__(self):
    self.number = 5

  def returnTest(self):
    return Test()

是的,它是有效的。该类是在创建对象并调用
returnTest
方法时定义的

In [2]: x = Test()

In [3]: y = x.returnTest()

In [4]: y
Out[4]: <__main__.Test instance at 0x1e36ef0>

In [5]: 
[2]中的
x=Test()
在[3]中:y=x.returnTest()
In[4]:y
出[4]:
在[5]中:

然而,在一种方法像工厂一样的情况下,您可能需要考虑使用装饰器。当继承和其他烦恼出现时,这会有所帮助

是的,它是有效的<代码>返回测试在调用之前不会运行。它不会创建无限循环,因为不会对新创建的对象调用该方法。

是。这是一个有效的python代码。许多编程语言允许返回正在定义的类的实例。考虑一下单例模式。

是的,它可以工作,但returnTest()似乎总是同一个Test实例

class Test:
  def __init__(self):
    self.number = 5

  def returnTest(self):
    return Test()


t = Test()
print t
print t.returnTest()
print t.returnTest()


$ python te.py
<__main__.Test instance at 0xb72bd28c>
<__main__.Test instance at 0xb72bd40c>
<__main__.Test instance at 0xb72bd40c>
类测试:
定义初始化(自):
self.number=5
def返回测试(自):
返回测试()
t=测试()
打印t
打印t.返回测试()
打印t.返回测试()
$python te.py
Python2.7和3.2也是如此@classmethod并没有什么不同。有趣的是,pypy每次都返回不同的实例:

$ pypy te.py
<__main__.Test instance at 0xb6dcc1dc>
<__main__.Test instance at 0xb6dcc1f0>
<__main__.Test instance at 0xb6dcc204>
$pypy te.py

尝试存储t.returnTest()结果,因为如果不这样做,它可能会被垃圾收集,并且在您看来,返回的是同一个实例,但它只是相同的地址,可以循环使用。这是一个很好的想法。将结果存储到列表中会继续创建不同的对象。My+1到kasyc。我正在Windows上使用Python 2.7.1。在不存储引用的情况下,我还可以观察到kasyc提到的垃圾回收空间的再利用/回收。实际上,这是一个伟大的想法。这是Pypy和Python2.7/3.2之间垃圾收集例程不同的问题。