gpt4 book ai didi

python - 修改其类的数据对象的函数

转载 作者:行者123 更新时间:2023-11-30 22:57:17 25 4
gpt4 key购买 nike

我想定义一个函数,将其命名为 test_controller(),并且我想将此函数传递给构造函数:my_thing = TestClass(test_controller)。该函数需要能够修改其类的数据对象。我听说过 Python 3 的 nonlocal 关键字,但我运行的是 Python 2.7。是否可以?我该怎么做呢?这是我已经尝试过的。

class TestClass(object):

def __init__(self, ctrl_func):
self.a = 4
self.ctrl_func = ctrl_func

def do_stuff(self):
self.ctrl_func()

def test_controller():
global a
a = 20

my_thing = TestClass(test_controller)
print my_thing.a #this prints 4
my_thing.ctrl_func()
print my_thing.a #this prints 4 but I want it to print 20

最佳答案

您可以传入对您想要修改的任何对象的引用。

class TestClass(object):

def __init__(self, ctrl_func):
self.a = 4
self.ctrl_func = ctrl_func

def do_stuff(self):
self.ctrl_func(self)

def test_controller(self):
self.a = 20

my_thing = TestClass(test_controller)
print my_thing.a #this prints 4
my_thing.ctrl_func(my_thing)
print my_thing.a #this prints 4 but I want it to print 20

或者,您可以将 ctrl_func 转换为对象的绑定(bind)方法:

import types

class TestClass(object):

def __init__(self, ctrl_func):
self.a = 4
self.ctrl_func = types.MethodType(ctrl_func, self)

def do_stuff(self):
self.ctrl_func()

def test_controller(self):
self.a = 20

my_thing = TestClass(test_controller)
print my_thing.a #this prints 4
my_thing.ctrl_func()
print my_thing.a #this prints 4 but I want it to print 20

引用:

关于python - 修改其类的数据对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757100/

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