用随机变量替换内置数据类型(int, float)



在现有的代码库中,有时我想将固定值更改为随机值。作为一个过于简单的例子:

def existing_function(v):
return v + 1
# Normal usage:
v = 1
existing_function(v)
2
existing_function(v)
2
# 'Stochastic' usage
v = aStochasticVariable()
class X:
def __init__(self, v):
self. v = v
def existing_function(self):
return self.v
o= X(v)
o.existing_function()
5
o.existing_function()
9

我正在考虑子类化,例如内置(int或float),但我不知道如何获得(例如)int的值(保存int值的变量的名称是什么?)。另一个选择是使用dunder调用作为属性:

class StochasticInt(int):
@property
def __call__(self):
return random.randint()

但这不起作用。我也找不到一个解决方案在已知的库,所以…有人有什么想法吗?

亲切的问候,弗吉尼亚州

__call__方法在调用实例时被调用,所以您非常接近,但您需要这样调用v:v().
此外,randint需要两个参数ab,以便a <= N <= b.
这里为示例,我们设置a=1b=10:

class StochasticVariable(int):
def __call__(self):
return random.randint(0, 10)

那么我们可以这样调用它:

>>> v = StochasticVariable()
>>> v()
5
>>> existing_function(v())
8

相关内容

  • 没有找到相关文章

最新更新