Ich habe eine Klasse mit einer Eigenschaft deleted
. Der Benutzer muss die ob.delete()
Methode verwenden. Wenn er versucht, ob.deleted = True
direkt zu tun, sollte er einen Fehler erhalten.Throw Fehler beim Setzen eines Attributs
class A(ORMBaseClass):
deleted = False
def delete(self):
self.deleted = True
a = A()
a.delete() # works
print(a.delete) # works
a.deleted = True # must throw exception
Exception: you cannot directly set deleted
Ich versuchte es mit __setattr__
Überlastung, aber das wirkt sich ob.delete()
auch.
Eigenschaften mit einem ob._deleted
privaten Attribute und ob.deleted
Eigenschaft sind nicht geeignet, da die Klasse ein ORM-Modell ist und er steht vor der UX Inkonsistenz des session.query(A).filter(A._deleted == True)
und a.deleted=True
.
Ich weiß Python hat keine vollkommen sichere Möglichkeit, dies zu tun, ich möchte nur stoppen und informieren Sie den Benutzer, der es kausal setzt.
Welche Python verwenden Sie? Ich kann das Problem mit Python-3.6 auf Arch Linux/x86-64 nicht bestätigen – user3159253
das gleiche hier mit 2,7/OsX –
@ user3159253 und Ashish, ich habe schlecht geschrieben, es gibt keinen vorhandenen Fehler. Ich habe den verwirrenden Wortlaut korrigiert. – aitchnyu