我希望能够将整数/浮点值重置为预定义的默认值,而不重写所有算术运算。像这样的
class DefaultInt(int):
def __init__(self, value):
super(DefaultInt, self).__init__(value)
self.default_value = value
def reset(self):
self.value = self.default_value
my_int = DefaultInt(19)
my_int += 1
my_int.reset()
但有两个问题:
value
本身。你知道吗my_int += 1
之后,my_int
显然变成了一个简单的int
你眼前的问题:
就地加法需要重新定义
__iadd__
(就地加法)以返回DefaultInt
对象(最好保存默认值,否则它将成为新值)正如您所写的,
reset
这件事看起来不可能,因为整数是不可变的。但是您可以将reset
的结果赋回相同的名称。那就行了。你知道吗输出:
你的长期问题:
但这是第一步。如果您尝试
my_int + 12
,您将看到它也返回一个int
:您必须定义__add__
。这同样适用于__sub__
。。。还有一个“隐藏”值问题,还有一个不可变的问题,它阻止您执行就地reset
。你知道吗结论:
我认为最好的方法是不要继承
int
并创建自己的、可变的类,其中包含为您的需要而精心设计的所有特殊方法(加上现在可以工作的reset
方法)。当重写int
时,您将没有所受的约束,并且您的代码将更清晰,即使方法是穷尽的(至少如果缺少一个方法,您会注意到它,而不是调用一个不合适的方法)。你知道吗我认为,如果你只需要一个复位功能,你可以简单地使用:
相关问题 更多 >
编程相关推荐