Python 함수new__및init__역할 및 구별 해석

3962 단어 Python함수.newinit
같이
둘 다 Python 대상 언어 에서 의 함수 입 니 다.new__비교적 적 게 사용,init__많이 썼어 요.
이상 하 다
__new__인 스 턴 스 를 만 들 기 전에 호출 되 었 습 니 다.인 스 턴 스 를 만 들 고 이 인 스 턴 스 대상 으로 돌아 가 는 것 이 정적 방법 이기 때 문 입 니 다.init__인 스 턴 스 대상 이 생 성 된 후에 호출 된 것 입 니 다.그리고 대상 속성의 초기 값 을 설정 합 니 다.보통 하나의 인 스 턴 스 를 초기 화 할 때 사 용 됩 니 다.실례 적 인 방법 이다.
즉:new__먼저 호출 됨,init__후 호출,new__의 반환 값(인 스 턴 스)은 에 게 전 달 됩 니 다.init__방법의 첫 번 째 매개 변수,그리고init__이 인 스 턴 스 에 인 자 를 설정 합 니 다.

===》》》
[약간의 설명]
1.object 의 신식 류 를 계승 해 야new__
2、__new__현재 클래스 를 대표 하 는 인자 cls 가 있어 야 합 니 다.이 매개 변 수 는 실례 화 될 때 Python 해석 기 에서 자동 으로 식 별 됩 니 다.
3、__new__반환 값 이 있어 야 합 니 다.실례 화 된 인 스 턴 스 를 되 돌려 야 합 니 다.이 점 은 스스로 실현new__부모 클래스(슈퍼(현재 클래스 이름,cls)를 통 해)new__나 온 인 스 턴 스 또는 object 의new__나 온 실례
4、__init__인자 self 가 있 습 니 다.바로 이 입 니 다.new__돌아 오 는 실례,init__재new__다른 초기 화 동작 을 수행 할 수 있 습 니 다.init__반환 값 필요 없 음
5、만약new__현재 클래스 의 인 스 턴 스 를 만 들 면 자동 으로 호출 됩 니 다.init__함수,return 문 구 를 통 해 호출 된new__함수 의 첫 번 째 매개 변 수 는 cls 로 현재 클래스 의 인 스 턴 스 를 보증 합 니 다.다른 클래스 의 클래스 라면;그러면 실제 생 성 된 것 은 다른 종류의 인 스 턴 스 입 니 다.현재 클래스 의 를 호출 하지 않 습 니 다.init__함수,다른 종류의 를 호출 하지 않 습 니 다.init__함수
6.하위 클래스 를 정의 할 때 다시 정의 하지 않 음new__()Python 기본 값 은 이러한 종류의 직접 부모 클래스 를 호출 하 는 입 니 다.new__()방법 은 이러한 인 스 턴 스 를 구성 합 니 다.이러한 부모 클래스 도 다시 쓰 지 않 았 다 면new__(),그러면 이 규칙 에 따라 object 로 거 슬러 올 라 가 는new__()방법,object 는 모든 신식 클래스 의 기본 클래스 이기 때 문 입 니 다.
7.하위 클래스 에 다시 쓰 면new__()방법,그러면 당신 은 임의의 다른 신식 종 류 를 자 유 롭 게 선택 할 수 있 습 니 다.new__(),모든 신식 류 는 object 의 후손 이 고 고전 류 는 가 없 기 때문이다.new__()방법)의new__()방법 은 이 신식 류 의 모든 전대 류 와 후대 류 를 포함 하여 실례 를 만 들 고,그것들 이 귀속 사 순환 을 일 으 키 지 않 는 다 면.어차피 자기 의 를 호출 할 수 는 없 을 거 야.new__,이것 은 틀림없이 사순환 이다.
8.하위 클래스 에 대한init__,그 호출 규칙 과new__일치 합 니 다.물론 하위 클래스 와 부모 클래스 의init__함수 가 모두 호출 되 고 싶 습 니 다.하위 클래스 의init__함수 에 부모 클래스 추가init__함수 호출.
9.우리 가 사용 할 때 가능 한 한init__함수,사용자 정의 하지 마 세 요new__함수,이 두 가지 가 파생 을 계승 할 때의 특성 이 매우 다 르 기 때문이다.
10、종 류 를 제조 업 체 에 비유,new__방법 은 바로 전기의 원자재 구 매 부분 입 니 다.init__방법 은 바로 원자 재 를 바탕 으로 가공 하여 상품 의 절 차 를 초기 화 하 는 것 이다.
【__init__방법

【__new__방법
__new__방법 이 받 아들 이 는 매개 변수 도init__똑 같 지만init__클래스 인 스 턴 스 생 성 후 호출 되 며new__방법 은 바로 이런 실례 를 만 드 는 방법 이다.
===》
구체 적 인 실행 논리:
1. p = Person(name, age)
2.우선 name 과 age 인 자 를 사용 하여 Person 류 의 를 실행 합 니 다.new__방법,이new__방법 은 Person 클래스 의 인 스 턴 스 를 되 돌려 줍 니 다(일반적으로 슈퍼(Persion,cls).new__(cls,...)이런 식 으로),
3.그리고 이 인 스 턴 스 를 이용 하여 클래스 의 를 호출 합 니 다.init__방법,지난 단계 에서new__생 성 된 실례 는 바로init__안에 셀 프.
그래서init__ 와new__ 가장 중요 한 차 이 는:
1.__init__ 보통 새로운 인 스 턴 스 를 초기 화 하 는 데 사 용 됩 니 다.이 초기 화 과정 을 제어 합 니 다.예 를 들 어 속성 을 추가 하고 추가 적 인 작업 을 합 니 다.클래스 인 스 턴 스 가 생 성 된 후에 발생 합 니 다.그것 은 실례 단계 의 방법 이다.
2.__new__ 일반적으로 새로운 인 스 턴 스 를 만 드 는 과정 을 제어 하 는 데 사용 된다.그것 은 등급 의 방법 이다.
【__new__의 역할
Python 공식 문서 에 따 르 면new__방법 은 주로 변 하지 않 는 클 라 스 를 계승 할 때(예 를 들 어 int,str,tuple)이러한 종류의 실례 화 과정 을 사용자 정의 하 는 경 로 를 제공 합 니 다.그리고 사용자 정의 metaclass 를 실현 합 니 다.
먼저 첫 번 째 기능 을 살 펴 보 겠 습 니 다.구체 적 으로 우 리 는 int 로 예 를 들 수 있 습 니 다.
만약 우리 가 영원히 양수 의 정수 유형 이 필요 하 다 면,통합 int 를 통 해 우 리 는 이러한 코드 를 쓸 수 있 습 니 다.

그러나 운행 후에 결 과 는 우리 가 생각 하 는 것 과 전혀 다르다 는 것 을 알 게 될 것 이다.우 리 는 마음대로-3 을 얻 었 다.이것 은 int 와 같은 가 변 적 이지 않 은 대상 에 대해 우 리 는 그것 을 다시 불 러 올 수 밖 에 없 기 때문이다.new__방법 만 이 사용자 정의 역할 을 할 수 있다.
이것 은 수 정 된 코드 입 니 다.

과부하 통과new__방법,우 리 는 필요 한 기능 을 실현 했다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기