ميراث متغير ثابت في بيثون
-
28-09-2019 - |
سؤال
أنا أكتب البرامج النصية Python لـ Blender لمشروع ، لكنني جديد تمامًا على اللغة. شيء أنا في حيرة من أمري هو استخدام المتغيرات الثابتة. إليك جزء من الكود الذي أعمل عليه حاليًا:
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"
الفكرة هي أن الصف الثاني يجب أن يرث نشيط متغير و يستحضر الطريقة من الأول ، بحيث يغير استدعاء Object_ot_openconstraintpanel.invoke () object_ot_openconstraintpanel.active. استخدام الذات كما فعلت أعلاه لن تعمل ، ولا استخدام Paneltoggle في حين أن. أي فكرة عن كيفية ذلك؟
المحلول
استعمال type(self)
للوصول إلى سمات الفصل
>>> 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
نصائح أخرى
يمكنك الوصول active
من خلال الفصل ينتمي إلى:
if panelToggle.active:
# do something
إذا كنت تريد الوصول إلى صف دراسي متغير من طريقة ، يمكنك الكتابة:
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.'
يمكن العثور على مثال عمل هنا: http://gist.github.com/522619
ال self
متغير (اسمه self
حسب الاتفاقية) هو المثيل الحالي للفئة ، مرت ضمنيًا ولكن تم استلامه بشكل واضح.
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