Python의 새로운 스타일 클래스는 버전 2.2에서 도입되었습니다. 이전 클래스를 클래식 클래스 또는 이전 스타일 클래스라고 부를 수 있습니다.
2.2에 새로운 스타일 클래스가 도입된 이유는 무엇인가요? 공식적인 설명은 다음과 같습니다.
클래스와 유형을 통합합니다.
2.2 이전, 예를 들어 버전 2.1에서는 클래스와 유형이 달랐습니다. a가 ClassA의 인스턴스인 경우 a.__class__는 'class __main__.ClassA'를 반환하고 type(a)는 항상 반환합니다.
새 클래스를 도입한 후에는 더 많은 내장 속성이 도입되고, 설명자가 도입될 수 있으며, 속성이 계산될 수 있는 등의 다른 이점이 있습니다.
앞으로 호환성을 위해 사용자 정의 클래스는 기본적으로 클래식 클래스입니다. 새 클래스는 모든 클래스의 기본 클래스 개체에서 상속되거나 개체에서 상속되는 새 클래스가 필요합니다.
최신 Python(2.7)을 사용하더라도 일부 기능은 이전 스타일 클래스에서 작동하지 않는다는 점에 유의할 가치가 있습니다.
그래서 새로운 스타일의 클래스를 사용하려면 두 가지 방법이 있습니다.
1. 메타클래스, 클래스 모듈 코드 앞에 다음 코드를 추가합니다. __metaclass__ = 클래스 이름(새 클래스가 정의되었으므로).
2. 클래스는 내장 클래스 객체에서 직접 또는 간접적으로 상속됩니다.
구식 클래스나 구 버전의 클래스와 호환될 필요가 없다면 모두 새로운 스타일의 클래스를 유지하세요.
Python3에서는 모든 클래스가 (암시적으로) 객체 클래스의 하위 클래스이기 때문에 이러한 문제가 존재하지 않습니다.
코드 예:
class oldClass: #经典类 def __init__( self ): pass class newClass(object): #新类 def __init__( self ): pass c1 = oldClass() c2 = newClass() c1.__class__ # 输出-> <class __main__.oldClass at 0x0137BF10> type(c1) # 输出-> <type 'instance'> c2.__class__ # 输出-><class '__main__.newClass'> type(c2) # 输出-><class '__main__.newClass'>