Devo essere in grado di impostare un flag su una classe (non su un'istanza di una classe) che non è visibile in una sottoclasse. La domanda è, è possibile, e come lo farei se lo fosse?Come aggiungere un attributo a python * class * che è _not_ ereditato?
Per illustrare, voglio qualcosa di simile:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
... dove hasattr(Master, "__flag__")
dovrebbe restituire True
per Master
ma False
per Child
. È possibile? Se é cosi, come? Non voglio dover impostare in modo esplicito __flag__
su falso in ogni bambino.
Il mio primo pensiero era di definire __metaclass__
, ma non ho il lusso di farlo perché Master
eredita da alcune altre classi e metaclassi che non controllo e che sono private.
definitiva che sto voler scrivere un decoratore modo che io possa fare qualcosa di simile:
@hide_this
class Master(SomeOtherClass): pass
@hide_this
class Child(Master): pass
class GrandChild(Child): pass
...
for cls in (Master, Child, GrandChild)
if cls.__hidden__:
# Master, Child
else:
# GrandChild
Si potrebbe renderlo '__hidden', quindi solo le classi in cui è stato definito direttamente avrebbero un attributo' _ClassName__hidden'. – jonrsharpe
C'è un motivo per cui non vuoi scrivere 'cls .__ dict __. Get ('__ hidden __')', a parte il fatto che è brutto? –
@jonrsharpe: no, quella soluzione non mi è venuta in mente. Ciò funzionerà in modo fantastico. Scrivi una risposta così posso accettarla se vuoi. Se non lo fai, aggiungerò io stesso la risposta per riferimento futuro. Grazie! –