【问题标题】:Object not accessible inside a function in PythonPython中的函数内部无法访问对象
【发布时间】:2021-07-24 13:15:48
【问题描述】:

我是 python 的初学者,我遇到了一个问题。

下面是我的代码:

class LocalQueryDictionary(dict):
    def __init__(self):
        self = dict()

    def addvalue(self, key, value):
        self[key] = value

#Global definition of the object, "local_query_dict"

local_query_dict = LocalQueryDictionary()

def save_local_query(query_name_input, query_val_input):

    local_query_dict.addvalue(str(query_name_input.get()), str(query_val_input.get()))
    localQuery_listbox.insert(END, str(query_name_input.get()))

我收到“AttributeError: 'dict' object has no attribute 'addvalue'”。

请帮助我。 提前致谢!!

【问题讨论】:

  • 去掉init函数。
  • 我无法复制它,请分享minimal reproducible example__init__ 函数没有意义,但这不是导致该错误的原因。
  • 你想在这里初始化基类self = dict() 吗?见this,否则删除__init__函数。

标签: python


【解决方案1】:

如果您出于某种原因将 dict 子类化,只需对其进行初始化。

对于添加值,您可以尝试__setitem__

class LocalQueryDictionary(dict):
    def __init__(self):
        super().__init__()

    def addvalue(self, key, value):
        self.__setitem__(key, value)
    

然后

a = LocalQueryDictionary()
a.addvalue('product', 'Lorem')
a.addvalue('state', 'NY')
print(a)
#=> {'product': 'Lorem', 'state': 'NY'}

【讨论】:

  • 原类 LocalQueryDictionary 也可以...
  • 有趣。我只是预计它不会工作,甚至没有检查。现在我有一个问题,怎么做? :)
【解决方案2】:

常规名称“self”是对类的引用。

如果我正确理解您的意图,那么您可能想要的是:-

class LocalQueryDictionary(dict):
    def __init__(self):
        pass

    def addvalue(self, key, value):
        self[key] = value


lqd = LocalQueryDictionary()
lqd.addvalue('k', 'v')
print(lqd)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多