Question

Je l'écriture de scripts Python pour Blender pour un projet, mais je suis assez nouveau pour la langue. Quelque chose que je suis confus au sujet est l'utilisation des variables statiques. Voici le morceau de code Je travaille actuellement 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 actif variable et Invoke méthode de la première, de sorte que l'appel OBJECT_OT_openConstraintPanel.invoke () change OBJECT_OT_openConstraintPanel.active. En utilisant auto comme je l'ai fait ci-dessus ne fonctionnera pas cependant, ni le fait d'utiliser panelToggle à la place. Toute idée de la façon dont je vais à ce sujet?

Était-ce utile?

La solution

utilisation type(self) pour l'accès aux attributs de classe

>>> class A(object):
 var  = 2
 def write(self):
  print type(self).var
>>> class B(A):
 pass
>>> B().write()
2
>>> B.var = 3
>>> B().write()
3
>>> A().write()
2

Autres conseils

Vous pouvez accéder à active par la classe il appartient à:

if panelToggle.active:
    # do something

Si vous voulez accéder à la class variable à partir d'une méthode, vous pouvez écrire:

def am_i_active(self):
    """ This method will access the right *class* variable by
        looking at its own class type first.
    """
    if self.__class__.active:
        print 'Yes, sir!'
    else:
        print 'Nope.'

Un exemple de travail se trouve ici: http://gist.github.com/522619


La variable self (nommée self par convention) est l'instance actuelle de la classe, implicitement passé mais explicitement recieved.

class A(object):

    answer = 42

    def add(self, a, b):
        """ ``self`` is received explicitely. """
        return A.answer + a + b

a = A()

print a.add(1, 2) # ``The instance -- ``a`` -- is passed implicitely.``
# => 45

print a.answer 
# => print 42
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top