在这种情况下如何使格式(自我)工作?
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: ‘number’
我希望format()通过__getitem __()来提取它所需的属性.
如何使它工作?
解决方法:
不,你必须使用** self并支持更多的映射方法.
但是,使用格式支持进行属性访问会更好:
def __str__(self):
return """
Commit {0.number} {0.sha}
Message {0.message}
Identity {0.identity}
""".format(self)
现在它将使用属性访问来查找从第一个位置参数到.format()的数字,消息等,这是self.
标签:python,python-3-x