2012-12-11 8 views
20

가능한 중복 :
Old style and new style classes in PythonPython 2.7의 구식 및 새 스타일 클래스는 무엇입니까?

파이썬 2.7에서 새로운 스타일과 옛 스타일의 클래스와 업무의 현재 상태는 무엇입니까? 파이썬에서 자주 작동하지 않지만 문제를 모호하게 기억합니다. 설명서에 문제가 전혀 표시되지 않는 것 같습니다 : The Python Tutorial: Classes. 나는 아직도 이것에 대해 걱정할 필요가 있습니까? 일반적으로 다음과 같이 선언해야합니다 :

class MyClass: 
    pass 

또는?

class MyClass(object): 
    pass 
+2

@LennartRegebro : 그 질문에, 2008 년에 요청했다 또한 2008 년에 받아 들여진 답변. 2012 년 Python 2.7의 상황을 묻고있었습니다. 대답은 그 질문을 읽지 못하는 것이 었습니다. – User

+0

그 대답이 파이썬 2.6에서 파이썬 2.7로 변경되었다고 생각할만한 이유가 있습니까? 그것은 중요하지 않지만. 귀하의 이유가 무엇이든이 질문을 올리는 것이면, 정확한 복제본입니다. –

+0

@LennartRegebro : 예. 4 년은 많은 시간을 필요로합니다. Python 2.6이 4 년 전인지 알지 못했습니다. – User

답변

21

항상 "개체"를 하위 클래스로 만듭니다. 그것들은 새로운 스타일 수업입니다.

  • 그런 식으로 파이썬 3을 사용할 준비가되었습니다.

  • 그런 식으로 적절하게 작동하려면 .super()이 필요합니다.

+6

메소드 데코레이터 ('@ property','@classmethod' 및'@staticmethod')는 말할 것도없고 새로운 스타일의 클래스에서만 작동합니다. –

+3

py3에서'class MyClass :'를 할 수 없습니까? 그렇지만 여전히 새로운 스타일 클래스입니까? – GP89

+0

@ GP89 : 예, Python 3. –

9

항상 새로운 스타일 클래스를 사용해야합니다. 새로운 스타일의 클래스는 Python 프로그래밍 언어로 기본 제공 유형 및 사용자 정의 클래스를 통합하려는 노력의 일부입니다.

새로운 스타일의 클래스가 제공하는 몇 가지가 같은 :

  • 속성 : GET/set 메소드
  • 정적 메소드와 클래스 메소드
  • 새로운 의 getAttribute 후크에 의해 정의되는 속성, getattr과 달리 모든 속성 액세스에 대해 이 될 수없는 경우가 아니라 이라고합니다.
  • 기술자 : 프로토콜 생성자를 재정의 객체
  • 를 통해 속성 액세스 의 동작을 정의하는 새로운
  • 메타 클래스

Source.