在 类 in Python 中将带有参数参数的函数存储为实例

Storing Functions with parameter arguments as instances in Classes in Python

我正在尝试设置一个 class,我可以在其中定义一个可以具有任意数量参数的函数 G(.)。下面的代码显示了 G(rij) 的默认设置,然后可以在 get_k() 和 get_y() 中使用。但是,我现在定义了第二个函数 G_ln(rij, a, c, s),它接受任意数量的参数。 class 已经定义了变量“a”。如何以最佳方式构造此代码,以便将参数存储在 class 中或可传递给任意 G.

的函数

下面的代码自然会产生错误,因为未定义“a”、“c”和“s”。这只是完整代码的示例,其中 get_y() 和 get_k() 也用于其他函数,因此我希望以一般方式传入参数。

class Tree:
    def __init__(self, a, sigma, j, dt):
        self.a = a
        self.sigma = sigma
        self.j = j
        self.dt = dt
        
    def set_G(self, G=lambda r: np.where(r < -0.01, 0.2, 0)):
        self.G = G
       
    def get_k(self, rij, ri0):
        t1 = (self.G(rij) - self.G(ri0)) * self.dt / self.dx
        return np.floor(self.j + t1 + 1/2)
    
    def get_y(self, rij, ri0):
        k = self.get_k(rij, ri0)
        t1 = (self.G(rij) - self.G(ri0)) * self.dt / self.dx
        return self.j + t1 - k
  
def G_ln(rij, a, c, s):
    if rij < np.log(s):
        val = -a * c * x / (np.exp(x) + c - s)
    else:
        val = - a * x
    return val    

a = 0.25
s = 0.02
sigma = 0.3
c = 0.03
lda = -0.12

rij = np.array([-0.01310713, -0.00444688,  0.00421338])
ri0 = rij[1]

test = Tree(a, sigma, j = [-1, 0, 1], dt=0.25)
test.set_G(G=G_ln)

k = test.get_k(rij, ri0)
y = test.get_y(rij, ri0)

也许按照这些思路是解决方案?但是,不一定需要任何额外的参数。

def set_G(self, G, args):
    self.G = lambda rij: G(rij, *args)

与其将这种复杂性推入您的 Tree class,我只想在设置 G 时绑定额外的参数:

test.set_G(lambda r: G_ln(r, a, c, s))

理论上,如果这些值只被 G 使用,G 应该是跟踪它们的东西。