2011-09-13 5 views
4

모듈의 객체를 모듈 코드로 초기화하는 것은 나쁜 습관입니까? Module.py에서파이썬 모듈 초기화

: 사용자 코드에서보다

class _Foo(object): 
    def __init__(self): 
     self.x = 'Foo' 

Foo = _Foo() 

, 그럴 수 : 사용자 코드에서 푸 클래스를 초기화하지 않고

>>> from Module import Foo 
>>> print Foo.x 
'Foo' 
>>> 

.... 물론 개체를 초기화하는 데 인수가 필요하지 않은 경우에만 유용합니다.

이렇게하지 않는 이유가 있습니까?

+0

하나의 인스턴스 만 필요하면'@ staticmethod'와 클래스 변수를 사용할 수 있습니다. – JBernardo

+0

@JBernardo'staticmethod'와 클래스 변수를 사용할 수 없으므로'classmethod'와 클래스 변수를 사용할 수 있습니다. 그것은 싱글 톤을 만드는 가난한 방법입니다. – agf

+0

@agf 나는 자바의 (나쁜) 삶의 방식처럼 보인다. 그러나 그렇게 나쁘지 않다. – JBernardo

답변

4

일반적으로 모듈을 사용할 수있게하려면 필요한 최소값 만 실행하면됩니다. 이렇게하면 성능 (로딩 시간)에 전반적인 영향을 미치며 디버깅을 쉽게 할 수 있습니다.
또한 일반적으로 주어진 클래스에서 둘 이상의 인스턴스가 만들어집니다.

그렇다면 좋은 이유로 (예를 들어 클래스의 인스턴스 하나만 원할 경우),로드 할 때 확실히 초기화해야합니다.

1

정말 편리 할 때가끔 이런 일을하지만, 나는 foo = Foo()을하는 경향이 있습니다. 클래스를 비공개로 설정하고 인스턴스를 Foo으로 사용할 수있게 만드는 아이디어는 정말 싫습니다. 귀하의 코드를 사용하는 개발자로서 저는 꽤 당황 스럽습니다.

+3

어떤 이유로 든 클래스를 비공개로 설정하려는 경우에도 여전히 인스턴스 이름을 소문자로 사용해야합니다. – agf

+0

예, 다음 [PEP8] (http://www.python.org/dev/peps/pep-0008/)이 다른 Python 개발자의 두뇌를 약화시키기 때문에. – zeekay