Voici le motif que je pense utiliser:
class Dicty(dict):
def __init__(self):
self.__dict__ = self
d = Dicty()
d.foo = 'bar'
print d['foo']
>>> bar
d['foo'] = 'baz'
print d.foo
>>> 'baz'
3 Réponses :
Ne définissez pas auto .__ dict __ code>. Call __ init __ (auto, * args, ** kwargs) code> sur la superclasse. En outre, dict code> hérite de objet code> de sorte que vous n'avez pas besoin de la spécifier. P>
Voici un moyen moins "hacky" d'atteindre le même effet: i pense em> que votre chemin peut bien fonctionner aussi bien, mais en définissant le __ dict __ code> Attribut comme celui-ci semble un peu sage de style IFFY et est tenu de poser quelques questions si quelqu'un d'autre finit par lire votre code. P> P>
Vous devriez attraper et traduire keillerror code> - __ getattr __ code> est censé lancer attributeError code>.
Si vous allez faire cela, il vaut mieux faire __ getattr__ = __getem __ code> et __ setattr__ = __setem __ code>. Plus simple, et un appel moins de fonction.
@Kindall @pioTrlegnica: Vous faites tous deux d'excellents points (bien que mutuellement exclusives)! Merci! :)
@kindall, c'est une idée géniale!
@Gearoidmurphy. Je suis intéressé par des conteneurs de données de chargement prenant en charge la syntaxe conteneur.Attribute code>. Y a-t-il une raison pour laquelle ces objets ne peuvent pas être marinés? Avez-vous des suggestions pour une solution alternative qui prend en charge le décapage?
Utilisez l'approche qui décrit «Sudacy» dans sa question, cela fonctionne bien
ne semble pas fonctionner pour un objet imbriqué. Et si la clé de la dicte a des espaces ..
Quelques choses. On est si vous essayez d'utiliser une méthode de dictionnaire, telle que Mais j'ai mis en œuvre quelque chose qui le fait sans ces problèmes. Vous pouvez le voir ici, c'est la classe d'attraction dans module dictlib.py . Ce module contient également une classe qui peut envelopper un autre objet de style de mappage, dans les cas où il ne peut pas être sous-classé. P> clés code>, vous ne pourrez pas l'obtenir maintenant. Il y avait quelques autres problèmes que j'ai rencontrés, tels que le pickle-capable et la copie. p>
Voir: Stackoverflow.com/questions/3031219/...
isinstance (dict, objet) code>. Vous n'avez pas besoin d'hériter deobjet code>. Et la mise en œuvre est plus que hacky. Aussi: duplicata de Accéder à des clés dict comme un attribut en Python? a>Les objets créés de cette manière peuvent être marinés sans problème, mais les objets créés dans le style suggéré par la réponse acceptée ne peuvent pas.