提问人:Ash Hekmat 提问时间:3/9/2023 最后编辑:Ash Hekmat 更新时间:3/9/2023 访问量:57
Python:对象方法无法查看其他方法对 self.variable 所做的更改
Python: Object method cannot see changes to a self.variable made by another method
问:
我有两个函数处理相同的数据,所以我认为创建一个类是有意义的。但是我无法从第二个方法中看到在第一种方法中对 self.variable 所做的更改。
class Settings:
def __init__(self):
self.settings_to_change = {}
def get_default(self, **kwargs):
self.settings_to_change.update('setting': True})
log(f'Settings to be changed: {self.settings_to_change})
def set_default(self, **kwargs):
log(f'Settings to be changed: {self.settings_to_change})
settings = Settings()
settings.get_default()
# output: Settings to be changed: {'setting': True}
settings.set_default()
# output: Settings to be changed: {}
我以为用自己。对于变量,并在创建对象时初始化它意味着我可以在一个对象方法中更新变量,然后在第二个对象方法中查看更新。但它似乎恢复到初始化值。
我不确定这是否与我的对象被调用的方式有关。
我有一个可以根据命令运行 python 脚本的应用程序。
首先,当设置窗口打开时:RunScript(script.py,action=settings.get_default)
然后是这样的:script.py
from resources.lib.script.actions import *
from resources.lib.script.settings import Settings
from resources.lib.utilities import *
class Main:
def __init__(self, *args):
settings = Settings()
try:
self.params = dict(arg.split('=', 1) for arg in args)
except:
self.params = {}
function = eval(self.params['action'])
function(**self.params)
if __name__ == '__main__':
Main(*sys.argv[1:])
第一次执行工作正常,但是当设置窗口关闭时,它会调用: 这时我在日志中看到self.settings_to_change看起来是空的。RunScript(script.py,action=settings.set_default)
答:
0赞
Shorn
3/9/2023
#1
您每次都需要指定 self,否则它将查找局部范围变量。
class Settings:
def __init__(self):
self.settings_to_change = {}
def get_default(self, **kwargs):
self.settings_to_change.update({'setting': True})
print(f'Settings to be changed: {self.settings_to_change}')
def set_default(self, **kwargs):
print(f'Settings to be changed: {self.settings_to_change}')
settings = Settings()
settings.get_default()
# output: Settings to be changed: {'setting': True}
settings.set_default()
# output: Settings to be changed: {}
#output
Settings to be changed: {'setting': True}
Settings to be changed: {'setting': True}
顺便说一句,为什么你的设置和你得到?get_default
set_default
评论
0赞
Ash Hekmat
3/9/2023
感谢您的回复 Shorn - 对不起,我在简化代码以在此处共享时不小心删除了自我。我重新添加了它们,可以确认我的问题仍然存在,但 Tim Roberts 建议这可能是由于我运行脚本的方式,这些方法没有在共享实例中调用。
0赞
Ash Hekmat
3/9/2023
对于您的第二个问题,我在“get_default”中更新的字典是与建议设置不匹配的设置值列表。我希望能够将其传递给我的set_settings方法,因此我只覆盖了正确的设置。这是我让用户选择并应用推荐的设置配置文件的方法。
评论
settings_to_change
self.settings_to_change
RunScript