像类一样初始化字典

时间:2016-09-14 19:33:15

标签: python dictionary initialization

class fileInfo(dict):
    def __init__(self, name, typ, size = 1):
        self = {}
        self["name"] = name
        self["type"] = typ
        self["size"] = size

    def __getitem__(self, key):
        if key == "name":
            return dict.__getitem__(self, "name")+ "." + dict.__getitem__(self, "type")
        return dict.__getitem__(self, key)

我创建了这个类,但是我遇到了 init 函数的问题。 当我尝试初始化这个类的对象时, init 函数返回一个空字典。

就初始化函数而言,我不理解什么?

2 个答案:

答案 0 :(得分:2)

此行不符合您的预期:

    self = {}

该行创建一个dict类型的新对象,并将本地名称self绑定到该对象。这与self的先前值完全无关,后者丢失了。并且,由于self是一个局部变量,因此当__init__()返回时,此行创建的对象将被标记为删除。

请改为尝试:

super(fileInfo, self).__init__()

这既不会创建也不会销毁任何对象,但会修改self引用的对象。

参考:

答案 1 :(得分:0)

创建类的实例后,将调用任何类的__init__方法。您无法手动调用它来实例化类,但使用类名。

此外,您并没有真正初始化从dict继承它的方法和属性的类。您需要使用super。此外,这是一个调用__init__具有实际意义的情况。

class fileInfo(dict):
    def __init__(self, name, typ, size = 1):
        super(fileInfo, self).__init__()

        self["name"] = name
        self["type"] = typ
        self["size"] = size

    def __getitem__(self, key):
        if key == "name":
            return dict.__getitem__(self, "name")+ "." + dict.__getitem__(self, "type")
        return dict.__getitem__(self, key)

file_info = fileInfo("file-name", "txt", 100)

print file_info["name"]

输出:

file-name.txt