놀랍게도 예.
>>> class C: pass
...
>>> c = C()
>>> type(c)
<class '__main__.C'>
>>> c.__class__
<class '__main__.C'>
>>>
>>>
>>> class D: pass
...
>>> c.__class__ = D
>>> c.__class__
<class '__main__.D'>
>>> type(c)
<class '__main__.D'>
필자는이를 위해 Python 3.6.3을 사용했습니다.
행동 중 점프하고 싶습니까? 이것을 확인해보십시오 :
>>> class C:
... def speak(self):
... return "I'm a C"
...
>>> class D:
... def shout(self):
... return "I'M A D"
...
>>> c = C()
>>> c.speak()
"I'm a C"
>>> c.__class__ = D
>>> c.shout()
"I'M A D"
우리는 당신을 사랑합니다, 어쩌면 ... 나는 이상합니다. 하지만 근사 하네, 응?
원래 클래스의 속성을 유지하는 방법을 직접 확인해 보는 것은 어떻습니까! 그것은 청초하다.
코드 냄새처럼 보입니다. 수업을 게시하고 달성하고자하는 것을 설명 할 수 있습니까? –
나는 그것을 좋아하지 않지만 다른 생각을 할 수는 없다. 아직 파일을 만들지는 않았지만 플래그 게임을 자율적으로 제작하고 있습니다. 각 팀에는 방어적이고 공격적인 두 명의 에이전트가 있으며, 하나가 죽으면 역할을 바꾸기를 원합니다. 이것은 해결책 같았습니다 –
그것은 냄새입니다. 역할은 객체의 _property_이며 런타임에 할당되어야합니다. 서로 다른 역할에 대해 허용되는 동작은 객체 구성 또는 자체 롤 (roll-your-own) 기능 테이블을 사용하여 관리 할 수 있습니다. 이건 정말'class' IMHO에는 좋지 않습니다. 그러나 다른 사람들은 동의하지 않을 수 있습니다. –