【发布时间】:2011-03-29 09:03:17
【问题描述】:
我正在为一个项目为 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"
想法是第二个类应该从第一个类继承active变量和invoke方法,这样调用OBJECT_OT_openConstraintPanel.invoke()就会改变OBJECT_OT_openConstraintPanel.active。但是,像我上面那样使用 self 将不起作用,而使用 panelToggle 也不起作用。知道我该怎么做吗?
【问题讨论】:
-
好吧,看来我可以使用 self.__class__.active 或 type(self).active 让方法正确继承。谢谢!
-
你为什么首先使用静态变量?这似乎不明智。这个
active属性是某种全局属性,在所有PanelToggle实例之间共享吗?如果是这样,为什么它实际上不是全球性的?或者为什么不在一些更全局的共享对象中? -
我希望每个 panelToggle 子类都有自己的“活动”变量,无需创建实例即可访问。如果我正确理解“global”关键字的使用,我必须先在“invoke(..)”中插入一个“global active”行,然后才能像局部变量一样使用 active。这样做会产生一个错误,指出未定义全局名称“活动”。但是,我不确定我是否理解我的方法有什么问题。
-
为什么是班级级别?显然,您希望每个子类都有一个变量。为什么是班级层面?这没什么意义。为什么这不是一个普通的实例变量?
标签: python inheritance syntax static blender