I amore Python's @property
decora il sistema. Mi piace il fatto che tu possa eseguire un codice personalizzato quando chiami aClassObect.attribute
. Soprattutto per la convalida dei dati quando imposti un attributo. Tuttavia, una cosa che voglio, ma non riesco a trovarla, è un modo per eseguire codice personalizzato quando si tenta di impostare un attributo che non esiste. Ad esempio, dire che ho ottenuto la seguente classe:Un metodo Python "catch all" per attributi non definiti/non implementati nelle classi
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
Ora, se ho myObj
, che è un'istanza della classe C
, e io chiamo myObject.x = 42
, verrà eseguito il setter appropriata, che è grande per dati di convalida. Ma questo non impedisce a qualcuno di chiamare myOjbect.b = 47
e creerà felicemente un nuovo attributo chiamato b
. C'è un modo per eseguire codice speciale quando si imposta un nuovo attributo? Avrei la possibilità di generare errori per dire qualcosa come "errore, questo attributo non esiste".
Ho una classe che funge da API per un database. Ogni istanza rappresenta una voce. Dopo aver modificato gli attributi di un oggetto, che rappresentano i campi nel database, si chiama 'object.save()' per aggiornare il DB. Preferirei che venisse generato un errore piuttosto che i campi essere omessi in modo silenzioso perché in realtà non esistono nel DB. –