héritage variable statique en Python
-
28-09-2019 - |
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?
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