ActiveState'nın oluşturulması sonra yeniden edilemez özelliklere sahip bir const
modül oluşturmak için saygıdeğer Alex Martelli tarafından Constants in Python başlıklı bir tarifi vardır. Bu, — numaralı sürümler haricinde aradığınız şey gibi görünüyor, ancak özellik adının büyük harf olup olmadığını kontrol ederek eklenebilir. Tabii ki, bu belirlenen tarafından engellenebilir, ancak bu Python'un yolu — ve çoğu kişi tarafından "iyi bir şey" olarak kabul edilir. Ancak, insanların daha sonra sadece isimleri silin ve farklı değerlere ribaund onları geri ekleyebilirsiniz beri sözde bariz __delattr__
yöntemi ekleme rahatsız etmeyin önermek, biraz daha zorlaştırmak için.
Bu benim hakkında alıyorum budur:
# Put in const.py...
# from http://code.activestate.com/recipes/65207-constants-in-python
class _const:
class ConstError(TypeError): pass # base exception class
class ConstCaseError(ConstError): pass
def __setattr__(self, name, value):
if name in self.__dict__:
raise self.ConstError("Can't change const.%s" % name)
if not name.isupper():
raise self.ConstCaseError('const name %r is not all uppercase' % name)
self.__dict__[name] = value
# replace module entry in sys.modules[__name__] with instance of _const
# (and create additional reference to module so it's not deleted --
# see Stack Overflow question: http://bit.ly/ff94g6)
import sys
_ref, sys.modules[__name__] = sys.modules[__name__], _const()
if __name__ == '__main__':
import const # test this module...
try:
const.Answer = 42 # not OK, mixed-case attribute name
except const.ConstCaseError as exc:
print(exc)
else: # test failed - no ConstCaseError exception generated
raise RuntimeError("Mixed-case const names should't have been allowed!")
const.ANSWER = 42 # should be OK, all uppercase
try:
const.ANSWER = 17 # not OK, attempts to change defined constant
except const.ConstError as exc:
print(exc)
else: # test failed - no ConstError exception generated
raise RuntimeError("Shouldn't have been able to change const attribute!")
Çıktı:
const name 'Answer' is not all uppercase
Can't change const.ANSWER
Bunu neden üzerine vakit geçiriyorsunuz? İnsanların Python kaynağınız var. Sadece değiştirebilirler. Neden "final" ve "sabit" ile uğraşalım? –
Biliyorsunuz, bu çok amaçlı. Python beyleri, hepimiz yetişkiniz ve onlar gibi davranmalıyız. Peki neden erişimi yasaklıyorsunuz? Bir yetişkin gibi davranın ve bunları asla kodunuzda değiştirmeyin. Eğer başka bir programcı yaparsa, kod kırılırsa onun hatasıdır ve kimin suçlayacağını bulmak için bir VCS (varsayalım) var. – Boldewyn
Ayrıca, denetlemek kolay bir şey. Herhangi bir "UPPER_CASE =" örneği bir hatadır çünkü birisi kuralları ihlal etti. –