Ho una classe Foo con un metodo isValid. Quindi ho una barra dei metodi() che riceve un oggetto Foo e il cui comportamento dipende dal fatto che sia valido o meno.Qual è il tipo di pitone più generale a cui posso aggiungere attributi?
Per verificare ciò, volevo passare un oggetto alla barra il cui metodo isValid restituisce sempre False. Per altri motivi, non posso creare un oggetto di Foo al momento del test, quindi avevo bisogno di un oggetto per simularlo. Quello che ho pensato inizialmente è stato creare l'oggetto più generale e aggiungere l'attributo è Valido per esso, per usarlo come Foo. Ma che non ha funzionato del tutto:
>>> foo = object()
>>> foo.isValid = lambda : False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'isValid'
ho scoperto oggetto non ha un __dict__
, quindi non è possibile aggiungere attributi ad esso. A questo punto, la soluzione che sto usando è la creazione di un tipo al volo per questo scopo e quindi la creazione di un oggetto di quel tipo:
>>> tmptype = type('tmptype',(), {'isValid' : lambda self : False})
>>> x = tmptype()
>>> x.isValid()
False
Ma questo sembra troppo a lungo un colpo. Ci deve essere un tipo generale facilmente disponibile che potrei usare per questo scopo, ma quale?
Beh, è praticamente la stessa cosa distribuita su più righe e con una nuova classe di stile. Ma la mia domanda persiste ancora: non esiste un tipo generalmente prontamente disponibile per raggiungere lo stesso scopo? Qualcosa come oggetto con un __dict__? Devo davvero creare un tipo solo per questo? – ricab
@ricab: ecco un rifiuto dell'idea che ho appena ottenuto su google. Potresti riuscire a trovarne altri. http://mail.python.org/pipermail/python-bugs-list/2007-January/036866.html – aaronasterling
Oh, ok, quindi non esiste un tipo simile. Anche se probabilmente mi mancava solo ... Grazie – ricab