2013-03-12 2 views
1

어느 것이 가장 좋습니까?Python에서 객체를 사용하는 가장 좋은 방법은 무엇입니까?

방법 1

object = Object() 
object.method() 

방법 2

Object().method() 

이 다른 클래스 내에서 사용하기위한, 그래서 제 (클래스 속성으로서 필요한 설정 모든 객체를 ether 수도 메서드) 또는 두 번째 메서드를 사용하여 액세스 할 수 있습니까?

각 방법을 사용하는 이유 (있는 경우)는 무엇입니까?

+2

가장 읽을 수있는 것을 사용하십시오. 후자는 컴파일 된 바이트 코드에서 2 개의 연산 코드를 덜 사용하지만,이 작업을 수행하지 않는 한 아무런 문제가 없습니다. –

+4

개체를 만들고 있지만 상태를 무시하면 잘못된 결과가 발생할 수 있습니다. –

+0

@WaleedKhan에 동의해야합니다. 'method()'는 무엇을하는지, 왜 정상적인 함수 대신 즉시 버려야 할 어떤 객체의 인스턴스 메소드입니까? – geoffspear

답변

4

첫 번째 방법은 일반적인 방법입니다. 인스턴스화 된 객체는 변수에 바인딩되므로 나중에 사용할 수 있습니다. Btw, 당신은 object.method가 아니라 object.method()를 의미 할 것입니다 (괄호는 실제로 메소드를 호출하는 데 사용됩니다).

방법 2는 인스턴스를 바인딩하지 않으므로 더 이상 주소를 지정할 수 없으며 나중에 가비지 수집 될 수 있습니다. 메소드를 호출 한 후 인스턴스를 사용할 필요가없는 경우에만 메소드 2를 사용하십시오.

+2

"나중에 가비지 수집 될 수 있습니다"는 오해의 소지가 있습니다. 적어도 cPython에서는 참조 카운트가 0이기 때문에 가비지 컬렉션을 필요로하지 않고 즉각적으로 제거 될 것입니다. – geoffspear

+0

@Wooble - 당신이 맞을 때, 다른 파이썬 구현이 이것을 똑같이하는 지 확신하지 못합니다. 우리는'cPython'을 * only * python으로 취급 할 때 조심해야합니다. 나는 확실히 다른 구현체가 견인력을 얻는 것을 보았습니다 ... – mgilson

+0

여러 줄로 객체에 접근하지만 [Class :: method()]와 같은 메소드 2 종류를 사용하면 (http://www.php.net/manual/en/) language.oop5.paamayim-nekudotayim.php) PHP에서, 괜찮겠습니까? 개체의 값을 변경하지 않겠습니다. – C9HDN

1

첫 번째 양식은 생성 된 개체에 대한 바인딩을 유지 관리합니다. 후자는 호출 할 때마다 새로운 객체를 만듭니다. 나는 대부분의 사람들이 전자를 선호 할 것이라고 생각한다.

관련 문제