Comment créer des objets avec des propriétés en Python?
En Javascript, il serait:
var newObject = { 'propertyName' : 'propertyValue' };
Comment le faire en Python?
- la même syntaxe de python serait de créer un dictionnaire, et ce n'est pas ce que je veux
- Pourriez-vous expliquer pourquoi vous voulez ce que vous me demandez? Il peut aider les gens vous guider vers le meilleur, le plus pythonic alternatives.
- J'ai une méthode qui renvoie un objet avec des propriétés. Dans le cas de la méthode échoue, je veux créer cet objet manuellement.
- Ce qui ne l'appelant à faire avec cet objet? Pourquoi ne pas avoir une classe dont le constructeur remplit ces propriétés?
- Pourquoi l'échec de la méthode?
- auto.réponse.out.écrire(le résultat.le contenu), la méthode que je fais appel est urlfetch.fetch code.google.com/appengine/docs/python/urlfetch/...
- il ne pourrait pas en raison d'une exception urlfetch.DownloadError
- un bon usage de l'écriture de tests
Vous devez vous connecter pour publier un commentaire.
il y a deux sortes de
type
utilise la fonction.'obj'
classe qui hérite de laobject
avec un'propertyName'
de l'ensemble des membres de'propertyValue'
." Et vous savez quoi? J'avais raison! Je ne pense pas que c'est trop peu intuitive.()
:obj = type('obj', (object,), {'propertyName' : 'propertyValue'})()
type('obj', bases=(object,), dict={})
(le premier arg nom est en fait "que" dans la version 2.6 de python, donc omis pour éviter la confusion.La réponse de pierre
Python 3.3 ajout de la
SimpleNamespace
de classe pour que le but exact:En plus le constructeur approprié pour construire l'objet,
SimpleNamespace
définit__repr__
et__eq__
(documenté en 3.4) de se comporter comme prévu.Je ne sais pas si il y a un moyen intégré pour le faire, mais vous pouvez toujours définir une classe comme ceci:
J'aime Smashery de l' idée, mais Python semble contenu pour vous permettre de modifier les classes sur votre propre:
Fonctionne très bien dans Python 2.5 pour moi. Notez que vous ne devez le faire à une classe dérivée de
object
- il ne fonctionnera pas si vous modifiez la ligne deobj = object
.obj = lambda: None
, ce qui est bizarre, mais va effectuer les tâches...object
est la racine de l'objet arborescence d'héritage, et s'il avait un associé dict pour détenir des biens, tous les objets en Python devra être associée à un dict. Je n'ai réellement aimé qu'il y ait un type standard, qui fait juste un conteneur vide de la classe, mais c'est vachement facile de simplement déclarer votre propre.Il est facile d'en Python pour déclarer une classe avec un
__init__()
fonction qui permet de configurer l'instance pour vous, avec des arguments optionnels. Si vous ne spécifiez pas les arguments que vous obtenez un vide instance, et si vous pouvez spécifier certains ou de tous les arguments de l'initialisation de l'instance.Je vous l'ai expliqué ici (mon mieux notées de réponse à ce jour) donc je ne vais pas retaper l'explication. Mais, si vous avez des questions, demandez et je vais répondre.
Si vous voulez juste un objet générique, dont la classe n'a pas vraiment d'importance, vous pouvez le faire:
Évident extension serait d'ajouter un
__str__()
fonction qui imprime quelque chose d'utile.Cette astuce est agréable parfois, lorsque vous voulez un plus pratique dictionnaire. Je trouve plus facile de type
x.foo
quex["foo"]
.Une autre option viable est d'utiliser namedtuple:
SilentGhost eu une bonne réponse, mais son code crée un nouvel objet de la métaclasse type, dans d'autres termes, il crée une classe. Et les classes sont des objets en Python!
donne
Pour créer un objet, d'une coutume ou de construire-dans la classe avec dict attributs (aka propriétés) dans une ligne, je vous suggère de simplement appeler:
et maintenant
est
qui signifie qu'il est un objet de la classe Foo
J'espère que cela aide ceux qui sont nouveaux à Python.