27 votes

Ajout d'attributs aux objets python

C'est une chose qui m'a dérangé pendant un moment. Pourquoi je ne peux pas faire:

 >>> a = ""
>>> a.foo = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'foo'
 

... alors que je peux faire ce qui suit?

 >>> class Bar():
...     pass
... 
>>> a = Bar()
>>> a.foo = 10 #ok!
 

Quelle est la règle ici? Pourriez-vous s'il vous plaît me pointer vers une description?

42voto

ThiefMaster Points 135805

Vous pouvez ajouter des attributs à un objet qui a un __dict__.

  • x = object() ne l'a pas, par exemple.
  • Des chaînes et d'autres de simples builtin objets aussi de ne pas l'avoir.
  • Classes à l'aide d' __slots__ aussi ne pas l'avoir.
  • Les Classes définies par class ont moins que la précédente déclaration s'applique.

Si un objet est à l'aide de __slots__ / ne pas avoir un __dict__, c'est généralement pour économiser de l'espace. Par exemple, en str il serait exagéré d'avoir un dict - imaginer le montant de la météorisation pour une très courte chaîne.

Si vous voulez tester si un objet donné a un __dict__, vous pouvez utiliser hasattr(obj, '__dict__').

Ce pourrait aussi être intéressant à lire:

Certains objets, tels que les types intégrés et de leurs instances (listes, tuples, etc.) n'ont pas d' __dict__. Par conséquent attributs définis par l'utilisateur ne peuvent pas être mis sur eux.

Un autre article intéressant à propos de Python modèle de données, y compris __dict__, __slots__, etc. est - ce à partir de la référence sur python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X