22

次の python コードは有効ですか?

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

  def returnTest(self):
    return Test()
4

4 に答える 4

27

はい、有効です。クラスは、オブジェクトを作成してreturnTestメソッドを呼び出すまでに定義されます。

In [2]: x = Test()

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

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

In [5]: 

ただし、メソッドがファクトリのように機能する場合は、classmethodデコレータの使用を検討することをお勧めします。継承やその他の煩わしさが邪魔をするとき、これは役に立ちます。

于 2012-05-30T06:23:00.510 に答える
2

はい、有効です。 returnTest呼び出されるまで実行されません。新しく作成されたオブジェクトでメソッドが呼び出されないため、無限ループは作成されません。

于 2012-05-30T06:24:05.920 に答える
1

はい、動作しますが、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>
于 2012-05-30T06:28:13.350 に答える
0

はい。これは有効な python コードです。多くのプログラミング言語では、定義されているクラスのインスタンスを返すことができます。シングルトンパターンを考えてください。

于 2012-05-30T06:24:50.940 に答える