次の 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]:
ただし、メソッドがファクトリのように機能する場合は、classmethodデコレータの使用を検討することをお勧めします。継承やその他の煩わしさが邪魔をするとき、これは役に立ちます。
はい、有効です。 returnTest
呼び出されるまで実行されません。新しく作成されたオブジェクトでメソッドが呼び出されないため、無限ループは作成されません。
はい、動作しますが、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>
これはPython2.7および3.2にも当てはまります。@classmethodは違いを生みませんでした。興味深いことに、pypyは毎回異なるインスタンスを返します。
$ pypy te.py
<__main__.Test instance at 0xb6dcc1dc>
<__main__.Test instance at 0xb6dcc1f0>
<__main__.Test instance at 0xb6dcc204>
はい。これは有効な python コードです。多くのプログラミング言語では、定義されているクラスのインスタンスを返すことができます。シングルトンパターンを考えてください。