2012-11-16 3 views

답변

14

Python2에서 object을 기본 클래스로 선언하면 클래스는 new-style class이됩니다. 그렇지 않으면 "클래식"클래스입니다. 차이 중

  • 속성은 새로운 스타일의 클래스와 함께 작동한다는 것이다

  • 새로운 스타일의 클래스는 mro method

  • 새로운 스타일의 클래스는 고전 클래스

    부족 많은 특성을 가지고있다
    In [288]: class Foo: pass 
    In [289]: dir(Foo) 
    Out[289]: ['__doc__', '__module__'] 
    
    In [290]: class Bar(object): pass 
    In [291]: dir(Bar) 
    Out[291]: ['__class__', '__delattr__',  '__dict__', '__doc__', '__format__', '__getattribute__',  '__hash__', '__init__', '__module__', '__new__', '__reduce__',  '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',  '__str__', '__subclasshook__', '__weakref__'] 
    

클래스 ic 클래스는 하위 호환성을 위해서만 Python2에 유지된다. 정의한 모든 사용자 정의 클래스는 새로운 스타일로 만들어야합니다.

Python3에서 모든 클래스는 새로운 스타일이므로 명시 적으로 선언 할 필요가 없습니다.

+0

+1이 사람에게! AFAIK는 새로운 스타일의 클래스를 사용하는 데는 단점이 없으므로 예외없이 항상 사용해야한다고 생각합니다. 이전 스타일의 클래스는 이름에서 알 수 있듯이 이전 버전과의 호환성을 위해서만 존재합니다 (파이썬 3.0에서 마지막으로 제거 된 이유입니다). –

+0

하나 이상 제공하는 주셔서 감사합니다. 사람들이 다른 사람들이 배울 수 있도록 시간을내어 주셔서 감사합니다. – Paxwell

+0

oldstyle 클래스의 가끔 이점을 생각해 볼 수 있습니다. 특별한 메소드 조회가 인스턴스에있을 수 있습니다. 예 : 'a = oldstyle(); .add____ = lambda * args : 'changed ''는 작동하지만 newstyle 객체와 동등한 것은 작동하지 않습니다. 어쩌면 한 두 번 나는 새로운 클래스를 만들지 않고도 작동 할 수 있기를 바랐지만 그게 전부였습니다. 그리고 대부분은 구조가 재고 할 필요가 있다는 신호였습니다. – DSM

0

파이썬 2에서 object은이를 "새로운 스타일의 클래스"로 만듭니다. 이것이 의미하는 바의 세부 사항은 그다지 중요하지 않지만 최종선은 항상 그것을 사용해야하거나 올바르게 작동하지 않을 수도 있습니다.

파이썬 3에서는 모든 것이 항상 새로운 스타일의 클래스이므로 object을 사용할 필요가 없습니다.

관련 문제