Python 중__new__및 __init__구별과 연계
__new__ 및 __init__ 차이점은 다음과 같습니다.
__new__ 객체 생성을 책임지고 __init__ 객체의 초기화를 책임집니다.
__new__:객체를 만들 때 호출되면 현재 객체의 인스턴스가 반환됩니다.
__init__:대상을 만든 후 호출합니다. 현재 대상의 일부 실례를 초기화하고 반환 값이 없습니다.
1. 클래스에서 __new__및 __init__동시에 __ 가 호출됩니다.new__
class ClsTest(object): def __init__(self): print("init") def __new__(cls,*args, **kwargs): print("new")ClsTest()
출력:
new
2. 만약__new__객체의 인스턴스를 반환하면 __ 이 암시적으로 호출됩니다.init__
코드 인스턴스:
class ClsTest(object): def __init__(self): print ("init") def __new__(cls,*args, **kwargs): print ("new %s"%cls) return object.__new__(cls, *args, **kwargs)ClsTest()
출력:
new <class '__main__.ClsTest'>init
3. __new__메서드는 구성된 객체를 반환합니다. __init__그렇지 않습니다. __init__반환 값이 없습니다.
class ClsTest(object): def __init__(cls): cls.x = 2 print ("init") return clsClsTest()
출력:
initTraceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: __init__() should return None, not 'ClsTest'
4. 만약__new__현재 클래스 cls의 인스턴스가 올바르게 반환되지 않았습니다.init__호출되지 않을 것입니다. 부류의 실례라도 안 됩니다.
class ClsTest1(object): passclass ClsTest2(ClsTest1): def __init__(self): print ("init") def __new__(cls,*args, **kwargs): print ("new %s"%cls) return object.__new__(ClsTest1, *args, **kwargs)b=ClsTest2()print (type(b))
출력:new
지식:
1. Object의 새로운 클래스를 계승해야 __new__
2. __new__실례화할 클래스를 나타내는 매개 변수 cls가 하나 이상 있어야 합니다. 이 매개 변수는 실례화할 때 Python 해석기에서 자동으로 제공됩니다. _new__반환 값이 있어야 합니다. 실례화된 실례를 반환하려면 return 부모 클래스 _new__나온 인스턴스 또는 object의 __new__나온 실례
3. __init__매개 변수self가 있습니다. 바로 이__new__반환된 인스턴스, __init____new__를 기반으로 다른 초기화 작업을 수행할 수 있습니다.__init__값을 반환할 필요가 없습니다.
4. 만약__new__객체의 인스턴스를 반환하면 __ 이 암시적으로 호출됩니다.init__
Python에서 __ 에 대한 추가 정보new__및 __init__의 차이점 및 연락처 설명은 아래 링크를 참조하십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.