2012-05-30 8 views

답변

17

예. 클래스는 객체를 생성하고 returnTest 메서드를 호출 할 때 정의됩니다.

In [2]: x = Test() 

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

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

In [5]: 

그러나, 방법은 공장 같은 역할을 경우에, 당신은 classmethod 장식 사용을 고려할 수 있습니다. 상속 및 다른 성가심이 방해가되면 도움이 될 수 있습니다.

1

예, 유효합니다. returnTest은 호출 될 때까지 실행되지 않습니다. 새로 생성 된 객체에서 메서드가 호출되지 않기 때문에 무한 루프가 생성되지 않습니다.

0

예. 유효한 파이썬 코드입니다. 많은 프로그래밍 언어는 정의 된 클래스의 인스턴스를 반환 할 수 있습니다. 싱글 톤 패턴을 생각해보십시오.

0

예, 작동하지만 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> 

이것은 파이썬 2.7 및 3.2에 해당됩니다. @classmethod가 차이를 만들지 않았습니다. 흥미롭게도, pypy는 다른 인스턴스 매번 반환

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

그렇게하지 않을 경우, 가비지 수집하고 수도 같은 인스턴스가 있다고 보인다 될 수 있기 때문에 t.returnTest() 결과를 저장하십시오 반환되지만 동일한 주소 만 재활용됩니다. – kasyc

+2

대단한 생각입니다. 결과를 목록에 저장하면 다른 개체가 계속 만들어집니다. –

+1

+1에 kasyc. Windows에서 Python 2.7.1을 사용하고 있습니다. 참고 문헌을 저장하지 않고도 kasyc에서 언급 한 쓰레기 수거 공간의 재사용/재활용을 관찰 할 수 있습니다. – pepr

관련 문제