5

私は自分のインタープリター用の単純な型システムを開発しています。私はこのようなものを書いています:

class Base(object):
    def __init__(self, content):
        self.__content = content

    @property
    def content(self):
        return self.__content

    @content.setter
    def content(self, value):
        self.__content = value

class Number(Base):
    def __init__(self, content):
        super(Number, self).__init__(content)

    def __add__(self, other):
        return Number(self.content + other.content)

    ...and so on

class Float(Number):
    def __init__(self, content):
        super(Float, self).__init__(content)

class Integer(Number):
    def __init__(self, content):
        super(Integer, self).__init__(content)

私の問題は、明らかに次のようなことをした場合です。

if __name__ == '__main__':
    f1 = Float(3.5)
    f2 = Float(2.3)
    f3 = f1 + f2
    type(f3)

Float 型の f1 と f2 を足して Number 型の f3 を取得しましたが、f3 は Float 型にしたいです。f1 と f2 と同じ型を返す Number スーパークラスで add 演算子を 1 回だけ定義するにはどうすればよいでしょうか? isinstance を使用する必要がありますか? これを行うためのよりクリーンな方法はありますか?

ありがとうございました!

4

1 に答える 1