이것은 오래된 질문이지만 답변의 아무도는 말할 것 같다. 일반적인 경우에는, 새로운 스타일 클래스 type(instance)
및 instance.__class__
대해 다른 값을 가질 수 있도록 수있다 :
class ClassA(object):
def display(self):
print("ClassA")
class ClassB(object):
__class__ = ClassA
def display(self):
print("ClassB")
instance = ClassB()
print(type(instance))
print(instance.__class__)
instance.display()
출력 : ClassB
가 __class__
재정의된다
<class '__main__.ClassB'>
<class '__main__.ClassA'>
ClassB
이유는 그러나 개체의 내부 형식 필드는 변경되지 않습니다. type(instance)
은 해당 유형 필드에서 직접 읽으므로 올바른 값을 반환하는 반면 instance.__class__
은 내부 유형 필드를 읽는 Python에서 제공 한 원래 설명자를 대체하는 새 설명자를 참조합니다. 해당 내부 형식 필드를 읽는 대신 하드 코딩 된 값을 반환합니다.
가장 큰 아이러니는 yairchu의 의견이 이제 형식을 바꾼 이후 같은 문제가 있습니다. : P –
그들이 어떻게 다르게 행동하는지, 어쩌면 왜 * 왜 * 표시할지 상처를주지는 않습니다. * 언제 그들이 다르게 행동하는지 말하는 것은 올바른 경우라도 게으른 대답을합니다. – MestreLion
이것은 파이썬 2에서만 중요한 문제입니다. 파이썬 3에서는이 세 표현식이 모두 참입니다. – Bob