gpt4 book ai didi

python - 如何将使用实例变量的实例方法作为参数传递给另一个函数?

转载 作者:行者123 更新时间:2023-12-04 01:43:02 28 4
gpt4 key购买 nike

我想将类 A 实例的方法 foo 传递给另一个函数 run_functionfoo 方法将使用其类 A 的实例变量。

这是一个最小的示例,其中 A 的实例变量只是 self.a_var,而 foo 只是打印该变量。

class A:
def __init__(self,a_var):
self.a_var=a_var
def foo(self):
print(self.a_var)


class B:
def __init__(self, A):
self.A=A

# EDIT (comment to compile)
self.A.do_something()

def run_function(self):
self.A.foo()
def run_function_2(self, bar):
bar()



myA = A(42)
myA.foo()

# Current implementation
myB=B(myA)
myB.run_function()

# Better(?) implementation
myB.run_function_2(myA.foo)

此时我将 A 类的实例 myA 传递给 B 的实例,并显式调用 self.A。富()。这会强制 A 的函数名称为 foo。这是愚蠢的。

更好的(?)实现将实例的函数传递给 run_function2。这可行,但我不确定这是否“安全”。

问题:

有没有我目前看不到的漏洞?

重要的部分是,传递的方法foo 需要访问(它的)类实例的实例变量。那么,在 run_function_2 中调用的 foo 是否总是可以访问 myA 的所有实例变量?

有没有更好的方法来实现这个?

编辑:我忘了补充,class B 总是有一个 A 的实例,因为它必须用那个实例do_something .也许那会改变一些东西(?)。对不起!

最佳答案

对于您的第二次实现,您是否考虑过以下因素:

>>> myAa = A(42)
>>> myAb = A(43)
>>> myB = B(myAb)
>>> myB.run_function_2(myAa.foo)
42

这可能不是您想要的。如何使用 getattr() 并只传入所需的方法名称:

>>> class C:
... def __init__(self, A):
... self.A = A
... def run_fct(self, bar):
... fct = getattr(self.A, bar)
... fct()
...
>>> myC = C(myAa)
>>> myC.run_fct('foo')
42

关于python - 如何将使用实例变量的实例方法作为参数传递给另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694713/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com