随机化整数行为

Ble*_*der 7 python int metaclass subclass

在看到这个问题之后,我开始想知道:是否有可能编写一个行为类似于随机整数的类?

我设法找到一些可覆盖的方法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))
Run Code Online (Sandbox Code Playgroud)

但我觉得有一种更优雅的方式来注入randint(1, 100)接受self参数的每个方法.

有没有办法做到这一点,而无需int从头开始重写整个班级?

就像是:

>>> x = RandomInt()
>>> x + 1
2
>>> x + 1
74
>>> x * 4
152
Run Code Online (Sandbox Code Playgroud)

pra*_*nsg 0

一个想法是拥有一种__call__返回随机数的方法。

class RandomInt(int):
    def __call__(self):
        return random.randint(1, 100)
    def __add__(self, other):
        return self() + other

    def __mul__(self, other):
        return self() * other

    def __div__(self, other):
        return self() / other

    def __sub__(self, other):
        return self() - other

    def __repr__(self):
        return str(self())
Run Code Online (Sandbox Code Playgroud)

运行示例

>>> x = RandomInt()
>>> x * 3
81
>>> x + 3
56
>>> x - 4
68
>>> x / 4
2
Run Code Online (Sandbox Code Playgroud)