1

私はここで何かを頭に入れようとしています...クラス継承の簡単なセットアップがあるとしましょう:

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

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

の既存のインスタンスがある場合、新しいインスタンスを作成せずSuperClassにそれを として「キャスト」できる方法はありますか?SubClass

4

1 に答える 1

2

Pythonには演算子がありません。インスタンスの属性castに型を割り当てることで、これを回避できます。__class__

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

castただし、 「」の有効性と安全性castはコンパイラによって検証されないため、これは他の多くの言語よりもエラーが発生しやすくなります。

たとえば、でSubClass使用できない属性にアクセスするメソッドがある場合、SuperClassそのメソッドをオンに呼び出そうとすると、の有効なインスタンスであるように見えsuper_instanceても、実行時にエラーが発生します。SubClass

于 2012-09-20T22:53:52.583 に答える