使用方法变量的函数影响类变量

AND*_*DEN 0 python oop variables function

假设我有一个带有一个函数作为参数的方法的类.有没有办法让这个函数改变inclass变量?

def f():
    # something here to change MyClass.var

class MyClass:
    def __init__():
        self.var = 1

    def method(self, func):
        #does something
        func()

obj = MyClass()
obj.method(f)
print(obj.var)
Run Code Online (Sandbox Code Playgroud)

Chr*_*ean 6

只需将您班级的内部参考 - self- 传递到函数中:

>>> class Class:
        def __init__(self):
            self.var = 1

        def method(self, func):
            func(self)

>>> def func(inst):
        inst.var = 0


>>> cls = Class()
>>> cls.var
1
>>> cls.method(func)
>>> cls.var
0
>>> 
Run Code Online (Sandbox Code Playgroud)

在一个相关的方面,我认为让你的函数成为你班级的一种方法会更清晰,更清晰:

>>> from types import MethodType
>>> 
>>> def func(self):
        self.var = 0


>>> class Class:
        def __init__(self):
            self.var = 1


>>> cls = Class()
>>> cls.var
1
>>> cls.func = MethodType(func, cls)
>>> cls.func()
>>> cls.var
0
>>> 
Run Code Online (Sandbox Code Playgroud)