2012-09-20 101 views
1

我試圖總結我的大腦周圍的東西在這裏...比方說,我有類繼承的簡單設置:中如何擴展現有的Python實例

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

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

如果我有一個現有實例SuperClass,有沒有一種方法可以將它'cast'爲​​,而不創建新的實例?

+2

看起來像[這](http://stackoverflow.com/a/3464154)可能是我正在尋找... – dgel

+2

我認爲這是其中之一...只是因爲你可以不意味着你應該......我會看看工廠設計模式並在稍後實例化它,一旦你知道你想要什麼。 –

+0

你爲什麼想要?你希望完成什麼?爲什麼'getVar'不是'SuperClass'方法? –

回答

2

在Python中,你沒有cast運營商 - 可以通過指定類型的實例的__class__屬性解決這個問題:

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

然而,這是更多的錯誤比cast容易出現在許多其他語言因爲您的「cast」的有效性和安全性未經編譯器驗證。

例如,如果​​有這樣的訪問,這是不提供SuperClass然後試圖呼籲super_instance這種方法會導致在運行時錯誤的屬性的方法,即使它似乎是一個有效的實例​​。

+2

我甚至不知道我真的想要做什麼 - 我試圖創建一個狀態機來模擬一些硬件。需要給這個更多的想法......你的回答是正確的,它工作正常。但我同意我應該重新思考我在做什麼。 – dgel

+1

不要使用子類型來指示狀態機中的狀態;使用對象的內部狀態(即屬性)。即使您需要不同的行爲,您也可以使用州/戰略模式輕鬆地發現生活。 –