Une classe Python peut contenir une instance d'elle-même comme un conteneur de données peut ressembler à ceci? Mon objectif est d'utiliser cette classe sous forme de conteneur de données contenant une copie à l'intérieur. être inité pour réduire l'action de plus enculé.
Il est peut-être utilisé comme une chaîne "Annuler" donner une chance d'obtenir la valeur de l'init Val quand il est nécessaire. P> est-il possible pour une telle action? P> P>
3 Réponses :
Eh bien, la classe que vous avez dans Self.A a aussi Self.A, et tellement furher sans fin. Je ne suis pas sûr d'avoir le but de ce que vous faites, mais vous pourriez essayer quelque chose comme ceci:
class A: def __init__(self, val, copy = True): if copy: self.a = A(val, False) self.val = val
Cela ne fonctionnera pas, pour la raison déjà donnée:
a (2) code> et appelle a .__ init __ code>. li>.
-
a .__ init __ code> appels a (val) code>. li>
-
a (val) code> appels a .__ init __ code>. li>
- goto 2 li>
ol>
Je suppose que vous faites cela pour que vous ayez un journal de ce que val code> a été; C'est-à-dire que si vous décidez un jour plus tard, vous décidez que vous voulez val code> 3 code>, vous ne jetez pas la valeur d'origine 2 code>. Du: p> code h3> xxx pré> explication h3>
-
A (objet) code>: les classes doivent maintenant hériter de objet code>. Juste parce que, fondamentalement. Li>
-
@Property code>: Cela dit à Python que chaque fois que nous demandons à A.Val, cela devrait appeler a.val () et renvoyer le résultat. Ceci est un décorateur em>; Recherchez la fonction Code> Propriété Code> BusganeIn pour plus d'informations. LI>
-
@ val.setter code>: Ceci est similaire à ce qui précède, mais indique à Python que chaque fois que nous essayons d'assigner à a.val code>, il doit appeler la fonction suivante. . Au lieu de définir a.val code>, il ajoute la valeur à la liste d'historique. LI>
ul> p>
Si je copie et collez cela exactement dans ipython (avec 2.7.5), alors self.history = [] jette un noméror parce que moi n'est pas encore défini. Tout conseil à faire dans ce cas? Cela semble résoudre mes problèmes, mais je ne peux pas le faire fonctionner.
Oui, bon point, c'est évidemment faux. Historique Code> doit être défini dans la méthode
__ init __ code> au lieu de la classe.
Oui, une classe peut contenir une instance de soi, vous ne pouvez tout simplement pas le créer sur l'initiation pour les raisons décrites par d'autres.
Par exemple, cette classe le fera, P>
>>>OuterInstance.innerInstance.value 456