【发布时间】:2013-04-21 14:37:19
【问题描述】:
看到this question后,我开始怀疑:是否可以编写一个行为类似于随机整数的类?
我设法用dir() 找到了一些可覆盖的方法:
class RandomInt(int):
def __add__(self, other):
return randint(1, 100) + other
def __mul__(self, other):
return randint(1, 100) * other
def __div__(self, other):
return randint(1, 100) / other
def __sub__(self, other):
return randint(1, 100) - other
def __repr__(self):
return str(randint(1, 100))
但我觉得有一种更优雅的方法可以将randint(1, 100) 注入到每个接受self 参数的方法中。
有没有办法做到这一点,而无需从头开始重写整个 int 类?
类似:
>>> x = RandomInt()
>>> x + 1
2
>>> x + 1
74
>>> x * 4
152
【问题讨论】:
-
您是在谈论动态定义每个函数(在函数列表中添加、计算、减去等)以返回传递给每个方法的 randint?编辑:甚至没有必要问它在问题中所说的
-
@jamylak:类似的东西。只要最终结果是
RandomInt的“值”对于每种方法来说都是随机的。 -
@Blender:啊,对于 every 方法。是的,那么您需要创建方法。只有当
int是左侧操作数或时,如果左侧操作数本身没有为操作。 -
@Blender
__repr__只需要self,不需要other -
最短的答案是:
Yes,但随后我收到提示:Body must be at least 30 characters; you entered 3.:)..
标签: python int subclass metaclass