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 函数返回一个空字典。
就初始化函数而言,我不理解什么?
答案 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