Python: la suppression d'un attribut de classe dans une sous-classe

J'ai une sous-classe et je veux qu'il pas inclure un attribut de classe qui est présent sur la classe de base.

J'ai essayé ceci, mais ça ne fonctionne pas:

>>> class A(object):
...     x = 5
>>> class B(A):
...     del x
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    class B(A):
  File "<pyshell#1>", line 2, in B
    del x
NameError: name 'x' is not defined

Comment puis-je faire cela?

  • Cela rompt LSP. Pourquoi voulez-vous faire cela?
  • Le x variable de classe de B que vous voulez supprimer est vraiment stockés dans A.__dict__, donc si vous avez réussi à le supprimer, vous devez également supprimer A.x. Par conséquent, le plus proche, vous pouvez venir se cache A.x en donnant B un x variable de classe aussi, comme @Keith suggère dans sa réponse.
  • Il n'y a pas beaucoup d'une connexion entre les LSP et le typage statique. LSP est un principe sain, car elle rend les hiérarchies de classe un comportement prévisible et cohérente. Ceci s'applique également à statiquement et dynamiquement typés langues, indépendamment de leur fournir les moyens de violer LSP.
InformationsquelleAutor Ram Rachum | 2011-05-19