假设我有一个看起来像这样的类:
class Foo:
def __init__(self, method):
self.method = method
def do_action(self):
self.method()
我想按如下方式实例化它:
some_var = False
def bar():
# Modifies existing variable's value
global some_var
some_var = True
foo = Foo(bar)
如何在不必定义 bar() 方法的情况下做到这一点? 我尝试了以下方法,但不起作用。
foo = Foo(lambda: (some_var := True))
当我这样做时,IDE 告诉我需要一个标识符。提前致谢!
编辑:
感谢那些回答的人,但是我并没有真正找到我需要的东西。不确定这是否是最佳实践,但我最终使用了 python 的 exec
并且它按预期工作:
foo = Foo(lambda: exec("some_var = True"))
答案 0 :(得分:0)
如果想法是让 bar
能够修改实例属性,则让 bar
使用 self
参数,以便 do_action
可以告诉它它正在操作哪个实例.您不能在 lambda
内进行变量赋值,因此请使用 __setattr__
:
class Foo:
def __init__(self, method):
self.method = method
self.some_var = False
def do_action(self):
self.method(self)
foo = Foo(lambda self: self.__setattr__("some_var", True))
foo.do_action()
print(foo.some_var) # True