Python 새 스타일 클래스와 이전 스타일 클래스의 차이점

高洛峰
풀어 주다: 2016-10-17 13:25:49
원래의
1196명이 탐색했습니다.

Python의 새로운 스타일 클래스는 버전 2.2에서 도입되었습니다. 이전 클래스를 클래식 클래스 또는 이전 스타일 클래스라고 부를 수 있습니다.

2.2에 새로운 스타일 클래스가 도입된 이유는 무엇인가요? 공식적인 설명은 다음과 같습니다.

클래스와 유형을 통합합니다.

2.2 이전, 예를 들어 버전 2.1에서는 클래스와 유형이 달랐습니다. a가 ClassA의 인스턴스인 경우 a.__class__는 'class __main__.ClassA'를 반환하고 type(a)는 항상 반환합니다. . 예를 들어 새 클래스를 도입한 후 ClassB는 새 클래스이고 b는 ClassB의 인스턴스이며 b.__class__와 type(b)는 모두 'class '__main__.ClassB'를 반환하므로 통합됩니다.

새 클래스를 도입한 후에는 더 많은 내장 속성이 도입되고, 설명자가 도입될 수 있으며, 속성이 계산될 수 있는 등의 다른 이점이 있습니다.

앞으로 호환성을 위해 사용자 정의 클래스는 기본적으로 클래식 클래스입니다. 새 클래스는 모든 클래스의 기본 클래스 개체에서 상속되거나 개체에서 상속되는 새 클래스가 필요합니다.

최신 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 &#39;instance&#39;>
  
c2.__class__            # 输出-><class &#39;__main__.newClass&#39;>
type(c2)                # 输出-><class &#39;__main__.newClass&#39;>
로그인 후 복사


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿