我想在我的python項目中保留一組字段名稱作爲別名(如'fieldName' = 'f'
)。雖然我敢肯定是最直接的方式是隻保留一個字典,像python中的別名字典,類與字典
F = {'_id' : '_id',
'tower' : 'T',
'floor' : 'F',
'pos' : 'P'
}
我想我可以只寫一個類一樣,
class F:
def __init__():
self._id = '_id',
self.tower = 'T',
self.floor = 'F',
self.pos = 'P'
的唯一理由就是那麼我可以通過訪問數據,
get_var(f._id)
這是短,更好看的比起來,
get_var(F['_id'])
如果我這樣做是濫用python嗎?有什麼優點或缺點?
這些別名將在啓動時從配置文件中讀取,並且不會通過運行時間進行更改。
編輯:
從塞拉斯的答案,我做了這個。與你的答案相比,這爲什麼會不好?
class Aliases:
""" Class to handle aliases for Mongo fields.
TODO: Should these be read off from a config file?
"""
def __init__(self):
self._F = {
'_id' : '_id',
'tower' : 'T',
'floor' : 'F',
'pos' : 'P',
'stabAmplitude' : 's',
'totalEnergy' : 'z',
...
}
def __getattr__(self, name):
""" Return the attributes from the alias dictionary instead of the
real attributes dictionary
"""
try:
return object.__getattribute__(self, '_F')[name]
except KeyError:
raise AttributeError('No attribute named %s.' % name)
def __setattr__(self, name, value):
""" No attributes should be changable """
if name == '_F':
return object.__setattr__(self, name, value)
else:
raise AttributeError('Attribute %s cannot be changed.', name)
這不是「濫用」蟒蛇本身,但如果你只需要結構來存儲不是方法或有狀態的鍵值對,那麼只需使用一個字典。當訪問對象中的元素時,不要讓代碼更復雜,以便刪除一個或兩個字符。 – Will
這不是關於字符長度。我覺得它看起來很醜陋,因爲這些名稱實際上是Python字典中的字段名稱(由'pymongo'返回)。所以一個普通的查詢看起來像'entry [F ['_ id']] vs'entry [F._id]'我覺得前者很混亂。 – xcorat