我正在为自己的解释器开发一个简单的类型系统。我正在写这样的东西:
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)
我已经将f1和f2相加,它们是Float类型,但是我得到了f3,它是Number类型,但我希望f3是Float类型。如何在 Number 超类中定义一次 add 运算符,返回一个与 f1 和 f2 相同的类型?我必须使用 isinstance 吗?有没有更清洁的方法来做到这一点?
谢谢!