Pythonの静的変数継承
-
28-09-2019 - |
質問
私はプロジェクトのためにBlenderのPythonスクリプトを書いていますが、私は言語にかなり新しいです。私が混乱しているのは、静的変数の使用です。これが私が現在取り組んでいるコードの一部です:
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"
アイデアは、2番目のクラスが アクティブ 変数と 呼び出します 最初からのメソッドでは、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
所属していません StackOverflow