Variable statique de l'héritage en Python
Je suis en train d'écrire des scripts Python pour Blender pour un projet, mais je suis assez nouveau à la langue. Quelque chose que je suis confus au sujet de l'utilisation de variables statiques. Voici le morceau de code je suis actuellement en train de travailler sur:
class panelToggle(bpy.types.Operator):
active = False
def invoke(self, context, event):
self.active = not self.active
return{'FINISHED'}
class OBJECT_OT_openConstraintPanel(panelToggle):
bl_label = "openConstraintPanel"
bl_idname = "openConstraintPanel"
L'idée est que la deuxième classe doit hériter de la active variable et la invoquer méthode à partir de la première, de sorte que l'appel OBJECT_OT_openConstraintPanel.invoke() modifie OBJECT_OT_openConstraintPanel.active. À l'aide de auto comme je l'ai fait ci-dessus ne fonctionne pas cependant, et ni ne l'aide panelToggle à la place. Aucune idée de comment je aller à ce sujet?
Bon, il semble que je peux utiliser l'auto.__la classe__.active ou de type(auto).active pour laisser la méthode hériter correctement. Merci!
Pourquoi êtes-vous à l'aide de variables statiques en premier lieu? Cela ne semble pas raisonnable. Est-ce
Je veux que chaque panelToggle sous-classe d'avoir son propre "active" de la variable qui peut être consulté sans la création d'une instance. Si je comprends l'utilisation de la "mondialisation" mot-clé correctement, je dois insérer un 'global active" ligne " invoke(..)' avant tout à l'aide d'active comme une variable locale. En faisant cela donne un message d'erreur indiquant que le nom global "active" n'est pas défini. Je ne suis pas sûr de comprendre quel est le problème avec mon approche, cependant.
Pourquoi au niveau de la classe? Clairement, vous voulez que chaque sous-classe d'avoir une variable. Pourquoi est-il au niveau de la classe? C'est ce qui fait que peu de sens. Pourquoi n'est-ce pas un ordinaire variable d'instance?
Pourquoi êtes-vous à l'aide de variables statiques en premier lieu? Cela ne semble pas raisonnable. Est-ce
active
attribut de certains genre de, partagés entre tous les PanelToggle
instances? Si oui, pourquoi n'est-il pas en réalité mondiale? Ou pourquoi n'est-il pas dans certains plus global de l'objet partagé?Je veux que chaque panelToggle sous-classe d'avoir son propre "active" de la variable qui peut être consulté sans la création d'une instance. Si je comprends l'utilisation de la "mondialisation" mot-clé correctement, je dois insérer un 'global active" ligne " invoke(..)' avant tout à l'aide d'active comme une variable locale. En faisant cela donne un message d'erreur indiquant que le nom global "active" n'est pas défini. Je ne suis pas sûr de comprendre quel est le problème avec mon approche, cependant.
Pourquoi au niveau de la classe? Clairement, vous voulez que chaque sous-classe d'avoir une variable. Pourquoi est-il au niveau de la classe? C'est ce qui fait que peu de sens. Pourquoi n'est-ce pas un ordinaire variable d'instance?
OriginalL'auteur gibberish | 2010-08-13
Vous devez vous connecter pour publier un commentaire.
utilisation
type(self)
pour l'accès aux attributs de classetype(self)
de toute façon différente de l'aideself.__class__
?Il n'est pas le moment. Mais certaines fonctionnalités peuvent être mises en œuvre plus tard. Aussi, vous pouvez faire un peu de monkey patch de type fonction.
OriginalL'auteur Odomontois
Vous pouvez accéder à
active
par le biais de la classe à laquelle il appartient:Si vous souhaitez accéder à la classe variable à partir d'une méthode, vous pouvez écrire:
Un exemple peut être trouvé ici: http://gist.github.com/522619
La
self
variable (nomméeself
par convention) est l'instance courante de la classe, implicitement adoptée, mais explicitement reçu.Édité mon post et ajouté les exemples de code dans le gist.github.com/522619, j'espère que ça aide.
Ah, que le code est lié à était juste ce dont j'avais besoin, merci!
OriginalL'auteur miku