Python 의 클래스 와 유형 예시 상세 설명

6477 단어 python유형종류
1.고전 류 와 신식 류
Python 의 클래스 와 유형 을 이해 하기 전에 Python 의 고전 클래스(classic classes)와 신식 클래스(new-style classes)에 대해 간단 한 개념 을 가 져 야 합 니 다.
Python 2.x 및 이전 버 전에 서 임의의 내장 유형 에서 파생 된 클래스(하나의 내장 유형 이 클래스 트 리 의 특정한 위치 에 있 으 면)는 모두'신식 클래스'에 속 하고 모든'신식 클래스'의 특성 을 얻 을 수 있 습 니 다.반대로 임의로 내 장 된 유형 에서 파생 되 지 않 는 유형 을'고전 류'라 고 부른다.
'신식 클래스'와'고전 클래스'의 구분 은 Python 3.x 이후 존재 하지 않 습 니 다.Python 3.x 이후 버 전 입 니 다.모든 클래스 는 내 장 된 형식 object(표시 되 지 않 은 계승 object 형식),즉 모든 클래스 가'신식 클래스'이기 때 문 입 니 다.
공식 문서https://www.python.org/doc/newstyle/
2.클래스 의 인 스 턴 스 와 대상
많은 언어 에서,클래스 의 실례 와 클래스 의 대상 은 단지 같은 사물 의 다른 명칭 일 뿐이다.파 이 썬 에서 클래스 의 대상 과 클래스 의 인 스 턴 스 는 완전히 다른 개념 이다.본 논문 에서 클래스 대상 이 라 고 부 르 는 것 은 class 코드 블록 이 실 행 된 후에 만 든 클래스 대상 을 말 하 며,클래스 의 인 스 턴 스 는 클래스 대상 이 만 든 인 스 턴 스 입 니 다.여기 서 간단하게 언급 하면 다음 과 같은 이해 에 편리 하고 이 개념 을 더욱 깊이 이해 하려 면'python 모든 대상'에 관 한 지식 을 참고 할 수 있 습 니 다.
3.클래스 인 스 턴 스 의 클래스 와 유형
Python 2.x 와 3.x 버 전에 서 다음 코드 를 실행 하려 고 시도 합 니 다.

class A():pass
class B():pass

a = A()
b = B()

if __name__ == '__main__':
  print(type(a))
  print(type(b))
  print(type(a) == type(b))
  print(a.__class__)
  print(b.__class__)
  print(a.__class__ == b.__class__)
Python 2.6.9 및 2.7.10 의 실행 결과:

Python 2.x 및 이전 버 전에 서 모든 고전 클래스 의 인 스 턴 스 는"instance"(인 스 턴 스 형식)입 니 다.그래서 고전 인 스 턴 스 의 유형(type)을 비교 하 는 것 은 의미 가 없습니다.모든 고전 인 스 턴 스 는 intance 유형 이기 때문에 비교 결 과 는 보통 True 입 니 다.더 많은 경우 고전 인 스 턴 스 의 가 필요 합 니 다.class__속성 으로 우리 가 원 하 는 결 과 를 얻 을 수 있 습 니 다(또는 isinstance 함수 사용).
Python 3.5.1 실행 결과

Python 3.x 및 그 후의 버 전에 서 클래스 와 유형 이 합 쳐 졌 습 니 다.클래스 인 스 턴 스 의 유형 은 이 인 스 턴 스 가 만 든 클래스 입 니 다(보통 클래스 인 스 턴 스 와 의class__마찬가지)Python 2.x 버 전의"instance"인 스 턴 스 형식 이 아 닙 니 다.
주의해 야 할 것 은 Python 2.x 버 전에 서'고전 류 의 인 스 턴 스 유형'이라는 결론 은 고전 류 에 만 적 용 됩 니 다.신식 클래스 와 내 장 된 유형의 실례 에 대해 그것들의 유형 은 더욱 명확 해 야 한다.
이전 코드 를 수정 하여 상기 관점 을 검증 하고 classa 와 class b 에 계승 자 object 를 표시 하여'신식 클래스'가 되도록 시도 합 니 다.

class A(object):pass
class B(object):pass

a = A()
b = B()

if __name__ == '__main__':
  print(type(a))
  print(type(b))
  print(type(a) == type(b))
  print(a.__class__)
  print(b.__class__)
  print(a.__class__ == b.__class__)
Python 2.7.10 실행 결과:

코드 실행 결 과 는 Python 3.x 와 완전히 같 습 니 다.Python 2.x 신식 인 스 턴 스 의 유형 이 바로 이 인 스 턴 스 가 만 든 클래스 임 을 알 수 있 습 니 다.또한 Python 3.x 에서 모든 클래스 가 신식 클래스(디 스 플레이 또는 암시 적 계승 object 클래스)임 을 증명 합 니 다.
이 어 내 장 된 유형 을 검증 하고 다음 코드 를 실행 해 보 세 요.

print(type([1, 2, 3]))
Python 2.7.10 실행 결과:

이 를 통 해 알 수 있 듯 이 내 장 된 유형의 인 스 턴 스 유형 도 신식 류 와 마찬가지 로 이 인 스 턴 스 가 만 든 클래스 입 니 다.예제 코드 에서 우 리 는 list 를 만 들 었 기 때문에 인 스 턴 스 의 유형 은 list 형식 입 니 다.
4.유형의 유형
만약 에 하나의 인 스 턴 스 유형 이 클래스(python 3.x)를 만 드 는 것 이 라면 그 유형의 유형 은 무엇 입 니까?
코드 를 계속 사용 하여 인증 을 시도 합 니 다:

class A():pass
class B():pass

if __name__ == '__main__':
  print(type(A))
  print(type(B))
  print(type(A) == type(B))
Python 2.7.10 실행 결과:

실행 결 과 를 통 해 알 수 있 듯 이 Python 2.x 에서 고전 류 의 유형 은 모두 classobj 입 니 다.type(A)==type(B)결 과 는 True 로 같은 유형 임 을 설명 합 니 다.
Python 3.5.1 실행 결과:

실행 결 과 를 통 해 알 수 있 듯 이 모든 유형 은 type 류 이 고 Python 3.x 류 와 유형 이 완전히 합 쳐 졌 음 을 다시 한 번 입증 합 니 다.유형 은 유형 이 고 유형 은 클래스 입 니 다.
코드 를 다시 수정 하여 class A 와 B 현식 을 object 에서 계승 하여 새로운 클래스 로 만 들 고 Python 2.7.10 에서 결 과 를 볼 수 있 습 니 다.

실행 결 과 는 Python 3.x 와 같 습 니 다.모두 신식 이기 때 문 입 니 다.
주:실행 결과,Python 2.x 는로 표시 되 며,Python 3.x 는공식 문서 참조:https://docs.python.org/3/library/stdtypes.html#bltin-type-objects
Type objects represent the various object types. An object's type is accessed by the built-in functiontype(). There are no special operations on types. The standard moduletypesdefines names for all standard built-in types.
Types are written like this:.
재 미 있 는 시 도 를 해 보 겠 습 니 다.

print(type(type))
python 2.x 와 3.x 에서 실 행 된 결 과 는 모두 같 습 니 다.type 형식 자체 도 클래스(새로운 클래스 와 내 장 된 유형의 클래스 와 유형 이 합 쳐 졌 습 니 다)이 고 자신 도 type 형식 입 니 다.


5.클래스 는 Type 클래스 의 인 스 턴 스 입 니 다.
위의 테스트 를 통 해 알 수 있 듯 이 모든 유형 은 type 류 입 니 다.다른 측면 에서 볼 때 클래스 는 type 류 의 인 스 턴 스 입 니 다.모든 신식 클래스 는 type 류 의 예화 에 의 해 만들어 지고 명시 적 또는 암시 적 으로 object 를 계승 합 니 다.

type([1, 2, 3])
실행 결 과 를 얻 었 습 니 다:,설명[1,2,3]이 list 는 list 류 의 인 스 턴 스 입 니 다.
동일 하 다

type(list)
실행 결 과 를 얻 었 습 니 다:,list 클래스 가 type 클래스 의 인 스 턴 스 임 을 설명 할 수 있 습 니 다.
호출 을 통 해class__속성 은 같은 결 과 를 얻 을 수 있 습 니 다:

list.__class__
[1, 2, 3].__class__
설명 클래스 대상 은 type 클래스 의 인 스 턴 스 입 니 다.
6.재 미 있 는 순환
앞에서 언급 한 바 와 같이 Python 3.x 에서 모든 클래스 가 명시 적 이거 나 암시 적 인 파생 된 object 류 이 고 type 류 도 예외 가 아니다.유형 자체 가 object 류 에서 파생 되 고 object 류 는 type 에서 파생 되 며 이들 은 순환 적 인 관 계 를 구성한다.
다음 코드 를 통 해 검증 합 니 다.

isinstance(object, type)
isinstance(type, object)
실행 결과:

실행 결과 object 는 type 형식 이 고 type 유형 도 object 형식 임 을 알 수 있 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기