包含类的动态填充字典的自动完成功能?

时间:2018-05-09 13:39:11

标签: python oop dictionary autocomplete

我有一个GUI,通过它我加载了一些数据。加载文件时,其文件名用作标识符,用于填充GUI以及下面的字典,以跟踪每个文件的当前状态。

但是,通过这种方法,我无法从MetaData类获得任何自动填充功能,例如当我想访问data.container.[GUIcurrentFile].one_of_many_attributes时。

有解决方法吗?也许以完全不同的方式将文件保存在内存中?人们通常在这种情况下做什么?我对GUI开发不太熟悉。

class Data:
    def __init__(self):
        self.container = dict()

    def load(self, name):
        self.container[name] = MetaData()

class MetaData:
    def __init__(self):
        self.one_of_many_attributes = None


# This is instantiated in the main part of the GUI, e.g. self.data = Data()
data = Data()


## Series of events happening through the GUI
# Grab loaded file through a GUI
GUIcurrentFile = "file1"
data.load(GUIcurrentFile)

GUIcurrentFile = "file2"
data.load(GUIcurrentFile)

# Each file has separate attributes
data.container[GUIcurrentFile].one_of_many_attributes = "foo"

# File is removed from GUI, and can easily be removed from dictionary internally
data.container.pop(GUIcurrentFile)

1 个答案:

答案 0 :(得分:0)

好的,所以类型提示终于点击了我。我希望原来的标题与这个答案有关。否则,请随时编辑它。

首先定义MetaData,如果实现一个方法来返回“MetaData”类型的对象,那么为PyCharm添加类型提示非常简单。

class MetaData:
    def __init__(self):
        self.foo = None
        self.really_long_name = None

class Data:
    def __init__(self):
        self.container = dict()

    def load(self, name):
        self.container[name] = MetaData()

    def get(self, name) -> MetaData: # specify what dict lookup returns
        return self.container[name]

data = Data()
data.load("file1")
data.get("file1").foo

enter image description here