在现有的代码库中,有时我想将固定值更改为随机值。作为一个过于简单的例子:
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
需要两个参数a
和b
,以便a <= N <= b
.
这里为示例,我们设置a=1
和b=10
:
class StochasticVariable(int):
def __call__(self):
return random.randint(0, 10)
那么我们可以这样调用它:
>>> v = StochasticVariable()
>>> v()
5
>>> existing_function(v())
8