Code: Select all
class Foo:
_UPDATED_AT: datetime = datetime.datetime(2000, 1, 1)
STATUS: bool = False
@classmethod
def bar(cls):
# updated the class variable from here only based on some condition
if some_cond:
cls.STATUS = True
cls.UPDATED_AT = datetime.datetime.now()
return cls.STATUS
Ich konnte die erste der beiden Anforderungen erreichen, indem ich eine Metaklasse verwendete, die im Grunde die Attributierungseinstellung blockiert.
Code: Select all
class MyMeta(type):
def __setattr__(cls, key, value):
raise AttributeError(f"Can't set {cls}.{key}")
Ich weiß, dass wir die Variablen in Python mit einem führenden Unterstrich als privat markieren können (ich habe bereits einen in meiner Klasse), der den Verbrauchern Ihres Codes mitteilen kann, dass es sich um Variablen handelt, die für den internen Gebrauch gedacht sind und nicht direkt vom Verbraucher verwendet werden sollen.
Ist das irgendwie erreichbar? ?
Mobile version