虽然正确,但当前的答案可能并不完整。
例如
a = TestClass()
b = a - 5
print type(b)
将 b 显示为一个整数,您可能希望它是一个 TestClass。
这是一个改进的答案
class positive(int):
def __new__(cls, value, *args, **kwargs):
if value < 0:
raise ValueError("positive types must not be less than zero")
return super(cls, cls).__new__(cls, value)
def __add__(self, other):
res = super(positive, self).__add__(other)
return self.__class__(max(res, 0))
def __sub__(self, other):
res = super(positive, self).__sub__(other)
return self.__class__(max(res, 0))
def __mul__(self, other):
res = super(positive, self).__mul__(other)
return self.__class__(max(res, 0))
def __div__(self, other):
res = super(positive, self).__div__(other)
return self.__class__(max(res, 0))
def __str__(self):
return "%d" % int(self)
def __repr__(self):
return "positive(%d)" % int(self)
现在同样的测试
>>> a = positive(10)
>>> b = a - 9
>>> print(type(b))
<class '__main__.positive'>
更新:
添加了repr和str示例,以便新类可以正确打印。即使 OP 使用 Python 2,也更改为 Python 3 语法以保持相关性。