如何在python中设置默认(可重置)int
我希望能够将整数/浮点重置为预定义的默认值,而不覆盖所有算术运算。差不多如何在python中设置默认(可重置)int,python,Python,我希望能够将整数/浮点重置为预定义的默认值,而不覆盖所有算术运算。差不多 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 +
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()
但有两个问题:
- 我无法通过子类化int类来访问隐藏的
值本身
- 在
之后,my_int+=1
显然变成了一个简单的intmy_int
default_value = 5
my_int = int.__new__(int, default_value)
my_int += 1
print my_int # prints 6
my_int = int.__new__(int, default_value)
print my_int # prints 5
您眼前的问题: 就地添加需要您重新定义
\uuu iadd\uuu
(就地添加)以返回DefaultInt
对象(最好保存默认值,否则它将成为新值)
正如您所写的那样,reset
看起来不可能,因为整数是不可变的。但是您可以将reset
的结果重新分配给相同的名称。那就行了
class DefaultInt(int):
def __init__(self,value=0):
super(DefaultInt, self).__init__()
self.default_value = value
def __iadd__(self,value):
old_default = self.default_value
r = DefaultInt(value + self)
r.default_value = old_default
return r
def reset(self):
return DefaultInt(self.default_value)
my_int = DefaultInt(19)
my_int += 1
print(my_int)
my_int = my_int.reset()
print(my_int)
输出:
20
19
你的长期问题:
但这是第一步。如果您尝试my_int+12
,您将看到它也返回一个int
:您必须定义\uuuu添加
。这同样适用于\uuuu sub\uuu
。。。还有一个“隐藏”值问题,一个不可改变的问题,它阻止您执行就地重置
结论:
我认为最好的方法不是继承int
,而是使用所有为您的需要而精心设计的特殊方法(加上现在可以使用的reset
方法)创建您自己的、可变的类。当重写int
时,您将不会受到约束,代码也会更清晰,即使方法是详尽的(至少如果缺少一个方法,您会注意到它,而不是调用一个不合适的方法)