2012-09-20 5 views
1

내가 ... 여기서 뭔가 주위에 내 머리를 감싸의 내가 클래스 상속의 간단한 설정해야한다고 가정 해 봅시다하기 위해 노력하고있어 확장하는 방법의기존 파이썬 인스턴스

class SuperClass(object): 
    def __init__(self): 
     self.var = 1 

class SubClass(SuperClass): 
    def getVar(self): 
     return self.var 

나는 기존의 경우 인스턴스를 SuperClass, 거기에 새로운 인스턴스를 만들지 않고 SubClass으로 '캐스팅'할 수있는 방법이 있습니까?

+2

[this] (http://stackoverflow.com/a/3464154)는 내가 찾고있는 것일 수 있습니다 ... – dgel

+2

나는 이것이 그 중 하나라고 생각합니다. 해야 ... 나는 당신이 원하는 것을 알고 나면 공장 디자인 패턴을보고 나중에 인스턴스화 할 것이다 .. –

+0

왜 당신이 원합니까? 성취하고자하는 것은 무엇입니까? 'getVar'가'SuperClass' 메소드가 아닌 이유는 무엇입니까? –

답변

2

파이썬에서 당신이 cast 운영자가 없습니다 - 인스턴스의 __class__ 속성 유형을 지정하여이 문제를 얻을 수 있습니다 : 그러나

>>> super_instance = SuperClass() 
>>> super_instance.__class__ = SubClass 
>>> print super_instance.getVar() 
1 

이 많은 다른 언어 cast보다 오류가 발생하기 쉽습니다입니다 귀하의 "cast"의 유효성과 안전성이 컴파일러에 의해 검증되지 않았기 때문입니다. 예를 들어

, SubClass가 유효한 경우로를 표시 심지어 불구하고 SuperClass 다음 실행시 오류가 발생 할 super_instance에 해당 메서드를 호출하는 시도에 사용할 수없는 속성을 액세스하는 방법을,이 있다면 SubClass입니다.

+2

저는 하드웨어를 모방 한 상태 머신을 만들기 위해 노력하고 있습니다. 이것을 좀 더 생각해 볼 필요가 있습니다 ... 당신의 대답은 정확합니다. 그러나 나는 내가하고있는 일을 다시 생각해야한다는 데 동의한다. – dgel

+1

상태 시스템의 상태를 나타내는 데 하위 유형을 사용하지 마십시오. 객체의 내부 상태 (즉, 속성)를 사용합니다. 다른 행동이 필요한 경우에도 주/전략 패턴을 사용하면 훨씬 쉽게 생활을 찾을 수 있습니다. –

관련 문제