在這種情況下如何使格式(自我)工作?
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