今天閑來(lái)無(wú)事翻看編寫(xiě)高質(zhì)量代碼--改善Python程序的91個(gè)建議,其中有一篇將常量集中在一個(gè)文件的建議。
正好這一段時(shí)間做的工作需要用上這部分內(nèi)容,因此做一下整理和擴(kuò)充。
原書(shū)作者使用的應(yīng)該是python2*鳍烁,在本機(jī)python3.5的環(huán)境下并不適用,因此略作改造繁扎,代碼如下:
class _const:
class ConstError(TypeError):
pass
class ConstCaseError(ConstError):
pass
def __setattr__(self, name, value):
if name in self.__dict__:
raise self.ConstError(
"Can't change const.%s, No Existsing Key!" % name)
if not name.isupper():
raise self.ConstCaseError(
'const name "%s" if not all uppercase' % name)
self.__dict__[name] = value
def __getitem__(self, key):
if name in self.__dict__:
return self.__dict__[key]
else:
raise self.ConstError(
"Can't return const.%s, No Existsing Key!" % key)
添加getitem的原因是為了像字典一樣獲取常量幔荒。
const = _const()
const.PI = 3.14159265
print(const.PI)
print(const['PI'])
# 上面兩種打印結(jié)果完全一致