Statische Variable Vererbung in Python
-
28-09-2019 - |
Frage
Ich schreibe Python-Skripte für Blender für ein Projekt, aber ich bin ziemlich neu in die Sprache. Etwas, was ich bin verwirrt über die Verwendung von statischen Variablen. Hier ist das Stück Code Zur Zeit arbeite ich an:
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"
Die Idee ist, dass die zweite Klasse sollte die aktiv Variable und die invoke Methode von der ersten erben, so dass OBJECT_OT_openConstraintPanel.invoke () aufrufen, ändert OBJECT_OT_openConstraintPanel.active. Mit self , wie ich oben tat wird jedoch nicht funktionieren, und auch nicht mit panelToggle statt. Jede Idee, wie ich mich über das?
Lösung
Verwendung type(self)
für den Zugriff auf Klassenattribute
>>> 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
Andere Tipps
Sie können active
durch die Klasse zugreifen es gehört zu:
if panelToggle.active:
# do something
Wenn Sie für den Zugriff auf die Klasse Variable von einer Methode, könnten Sie schreiben:
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.'
Ein Arbeitsbeispiel finden Sie hier: http://gist.github.com/522619
Die self
Variable (namens self
vereinbarungs) ist die aktuelle Instanz der Klasse, implizit vergangen, aber explizit empfangen.
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