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 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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top