2015-11-18 3 views
4

J'ai la classe suivanteComment changer l'attribut parent dans la sous-classe python

class Foo(): 
    data = "abc" 

Et je la sous-classer

class Bar(Foo): 
    data +="def" 

Je suis en train de modifier un attribut de classe parent dans la sous-classe. Je veux que ma classe parente ait une chaîne, et ma sous-classe devrait ajouter des données supplémentaires à cette chaîne. Comment cela devrait-il être fait en Python? Ai-je tort par conception?

Répondre

4

vous poser deux questions:

Comment ça devrait être fait en Python?

class Bar(Foo): 
    data = Foo.data + "def" 

Ai-je tort par la conception?

Je ne généralement pas utiliser des variables de classe en Python. Un plus paradigme typique est d'initialiser une variable d'instance:

>>> class Foo(object): 
... data = "abc" 
... 
>>> class Bar(Foo): 
...  def __init__(self): 
...   super(Bar, self).__init__() 
...   self.data += "def" 
... 
>>> b = Bar() 
>>> b.data 
'abcdef' 
>>> 
+0

Impossible de modifier, car une petite modification, mais assurez-vous d'ajouter une citation de fermeture. –

+0

Merci! Btw est-ce une bonne pratique pour stocker des données dans les classes de cette façon? – George

1

Vous pouvez vous référer à des variables de classe de Foo de l'espace de noms de Bar via un accès attribut normal:

class Bar(Foo): 
    data = Foo.data + 'def' 

Je ne sais pas si c'est un bon pratique, mais il n'y a aucune raison pour que ce soit mauvais.

+0

Merci! Cela fonctionne parfaitement – George

3

Vous pouvez initialiser l'état de la classe Foo de la classe Bar, puis ajouter aux données comme ceci:

class Foo(object): 
    def __init__(self): 
     self.data = "abc" 

class Bar(Foo): 
    def __init__(self): 
     super(Bar, self).__init__() 
     self.data += "def" 

Lorsque vous instanciez une instance de Bar, la valeur des données qui en résulte est:

abcdef