T.__new__(S, ...) -> a new object with type S, a subtype of T
这里的subtype指的是什么?
class A(int):
pass
class B(int):
def __new__(cls):
return A.__new__(int)
b = B()
isinstance(b, A)
#False
type(b)
#<class 'int'>
天蓬老师2017-04-17 17:52:46
질문에 답하세요
subtype
은 문자 그대로 子类
입니다. issubclass(cls1, cls2)
이 cls1
의 하위 클래스인지 확인하려면 cls2
을 사용하세요.
의 버전이 무엇인지, python
이 가로채고 있는 문서가 무엇인지는 확실하지 않지만 공식 설명에 따르면 T.__new__(S, ...)
는 X.__init__(Y, ...)
의 인스턴스 객체를 생성할 뿐 아무런 관련이 없습니다. with Y
. X
에 X
로 판단할 수 있는 __new__
속성이 있다는 것이 전제입니다.
hasattr(X, '__new__')
이 아니라사실 여기서 초점은
속성이 무엇인지에 있습니다.subtype
__new__
간단히 말하면
는 객체 초기화(추가 속성 변수 추가 등)를 제어하며, __new__
는 객체 소멸을 제어합니다. 신경쓰다 __init__
.__del__
__init__
질문을 생각해 보세요.
개체를 생성합니까?n = N()
N
물론 대답은 '아니요'입니다. 객체 생성과 객체 초기화의 차이점을 자세히 설명하기 위해 코드는 다음과 같습니다.
에 전달됩니다.__new__
__init__
의한 단계 더 나아가
매개변수는 무엇인가요?__new__
으아악
cls
이것은
에는 메서드가 없고 기능만 있습니다. python
을 실행할 때 실제로는 python
을 먼저 실행한 다음 P()
을 실행합니다.p1 = P.__new__(P)
으아악
P.__init__(p1)
요약하자면
과 아무 관련이 없습니다. T.__new__(S, ...)
가 T
의 hello
속성을 반환하는 것과 마찬가지로 self
과 유사하며 관련이 없습니다. . name
X
함수만 더 자세히 설명하려면 내 글을 읽고 Ruby의 클래스를 이해하는 것이 좋습니다.1.
python
2, 위 코드는
약간 차이가 있습니다python3