찾다

 >  Q&A  >  본문

python中的subtype是什么?

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'>
大家讲道理大家讲道理2890일 전692

모든 응답(1)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 17:52:46

    질문에 답하세요

    subtype은 문자 그대로 子类입니다. issubclass(cls1, cls2)cls1의 하위 클래스인지 확인하려면 cls2을 사용하세요.

    당신이 사용하고 있는

    의 버전이 무엇인지, python이 가로채고 있는 문서가 무엇인지는 확실하지 않지만 공식 설명에 따르면 T.__new__(S, ...)X.__init__(Y, ...)의 인스턴스 객체를 생성할 뿐 아무런 관련이 없습니다. with Y . XX로 판단할 수 있는 __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, ...)Thello 속성을 ​​반환하는 것과 마찬가지로 self과 유사하며 관련이 없습니다. . name X

    추가 지침

    1.
    함수만 더 자세히 설명하려면 내 글을 읽고 Ruby의 클래스를 이해하는 것이 좋습니다.

    python2, 위 코드는

    버전에서 검증이 되었으며,

    약간 차이가 있습니다python3

    회신하다
    0
  • 취소회신하다