Verhindern Sie, dass eine Klassenvariable außerhalb der Klasse geändert wirdPython

Python-Programme
Anonymous
 Verhindern Sie, dass eine Klassenvariable außerhalb der Klasse geändert wird

Post by Anonymous »

Ich habe die folgende Klasse, in der ich einige Klassenvariablen und eine Hilfsklassenmethode definiert habe, mit der ich den Wert dieser Klassenvariablen basierend auf einer Bedingung aktualisiere.

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 möchte 1) verhindern, dass diese Klassenvariablen direkt außerhalb der Klasse aktualisiert (d. h. gesetzt) ​​werden, 2) aber in der Lage sein, die Klassenvariable über die Klassenmethode zu aktualisieren, also semantisch etwas, das sich wie eine private Klassenvariable in C++ verhält.
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}")
Erwartungsgemäß verhindert dies jedoch auch, dass Aktualisierungen innerhalb der Klasse stattfinden. Ich bin mir nicht sicher, ob dies mit reinem Python möglich ist, aber im Grunde denke ich, dass ich irgendwie erkennen muss, ob die Aktualisierung innerhalb oder außerhalb der Klasse erfolgt.
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? ?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post