herencia variable estática en Python
-
28-09-2019 - |
Pregunta
Estoy escribiendo scripts de Python para Blender para un proyecto, pero estoy bastante nuevo en el lenguaje. Algo que estoy confundido acerca es el uso de variables estáticas. Aquí está la pieza de código Actualmente estoy trabajando en:
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"
La idea es que la segunda clase debe heredar el activa variable y el invoke método de la primera, por lo que llamar OBJECT_OT_openConstraintPanel.invoke () cambia OBJECT_OT_openConstraintPanel.active. Con sí como lo hice anteriormente no funcionará sin embargo, y tampoco lo hace utilizando panelToggle en su lugar. Cualquier idea de cómo voy sobre esto?
Solución
type(self)
uso para el acceso a los atributos de clase
>>> 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
Otros consejos
Se puede acceder active
través de la clase a que pertenece:
if panelToggle.active:
# do something
Si desea acceder a la class variable de un método, se podría escribir:
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 ejemplo de trabajo se puede encontrar aquí: http://gist.github.com/522619
La variable self
(llamado self
por convención) es la instancia actual de la clase, de manera implícita, pero pasó explícitamente recibido.
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