Python 格式化self,这是一个字典
在这种情况下,如何使Python 格式化self,这是一个字典,python,python-3.x,Python,Python 3.x,在这种情况下,如何使格式(self)起作用 class Commit: number = None sha = None message = None identity = None def __init__(self, raw, number): r = raw.commits[number] self.number = number self.sha = r['sha'] self.m
格式(self)
起作用
class Commit:
number = None
sha = None
message = None
identity = None
def __init__(self, raw, number):
r = raw.commits[number]
self.number = number
self.sha = r['sha']
self.message = r['message']
self.identity = raw.identities[r['identity']]
def __str__(self):
return """
Commit {number} {sha}
Message {message}
Identity {identity}
""".format(self)
def __getitem__(self, attr):
return getattr(self, attr)
def __contains__(self, attr):
return hasattr(self, attr)
如果我尝试访问单个属性作为
c = Commit(raw, 170)
print(c['sha'])
例如,它是有效的。但是,如果我直接打印(c),它会说:
KeyError:“数字”
我希望format()
能够通过\uuu getitem\uuuu()
获取它所需的属性
如何使其工作?不,您必须使用
**self
并支持更多映射方法
但是,您最好使用对属性访问的格式支持:
def __str__(self):
return """
Commit {0.number} {0.sha}
Message {0.message}
Identity {0.identity}
""".format(self)
现在,它将使用属性访问从第一个位置参数到
.format()
,即self
查找number
,message
,等等。您有一个self.number
,但想访问一个self['number']
。这是明显的
试试
{0.number}
而不是…如果identity
是一本字典,我想把某些元素放进去怎么办?这不起作用:Identity:{0.Identity['author\u name']}
format()
不理解引号,请尝试{0.Identity[author\u name]}
@Flavius:仔细阅读;您不需要使用引号。:-)