我在使静态类工作时遇到了一些麻烦。关于类中函数的范围,我缺少一些东西。如果调用该脚本会给我以下错误:
$timeout(function(){
$scope.swiperSliders[idcat-1].onResize();
$scope.swiperSliders[idcat-1].update(true);
}, 100);
我如何在课堂上定义这些功能?我这样称呼模块:
NameError: global name 'disableCostumFrames' is not defined #
import maya.cmds as cmds
from functools import partial
class Blast:
def createWindow():
# Todo:
# hanldes the gui for the user
windowID = 'window'
if cmds.window(windowID, exists = True):
cmds.deleteUI('window')
window = cmds.window(windowID, title="Blast", iconName='Blast', widthHeight=(400, 200) )
cmds.frameLayout( label='')
cmds.rowColumnLayout( numberOfColumns=4, columnWidth=[(1, 100),(3, 100)] )
cmds.text( label='Start: ' )
global Blast_startFrame
Blast_startFrame = cmds.textField( enable = False)
cmds.text( label=' End: ' )
global Blast_endFrame
Blast_endFrame = cmds.textField( enable = False)
cmds.setParent('..')
cmds.rowColumnLayout( numberOfColumns=2, columnWidth=[(1, 100), (2, 100)] )
cmds.radioCollection()
#cmds.radioButton( label='Full', select = True, onCommand= partial(disableCostumFrames, Blast_startFrame, Blast_endFrame ) )
#cmds.radioButton( label='Costum', onCommand= partial(enableCostumFrames, Blast_startFrame, Blast_endFrame ) )
cmds.setParent('..')
cmds.rowColumnLayout( numberOfColumns=1, columnWidth=[(1, 400), (2, 100)] )
cmds.button( label='Playblast' ,command= 'createPlayblast')
cmds.setParent('..')
cmds.showWindow( window )
return Blast_startFrame, Blast_endFrame
def main():
createWindow()
def enableCostumFrames(Blast_startFrame, Blast_endFrame, *args):
cmds.textField(Blast_startFrame, edit=True, enable=True)
cmds.textField(Blast_endFrame, edit=True, enable=True)
def disableCostumFrames(Blast_startFrame, Blast_endFrame, *args):
cmds.textField(Blast_startFrame, edit=True, text="", enable=False)
cmds.textField(Blast_endFrame, edit=True, text="", enable=False)
也许我这边做错了什么?感谢任何帮助。
答案 0 :(得分:0)
在这种情况下,您需要为类中的所有方法添加self
引用。通常的python类看起来像这样:
class MyClass(object):
def __init__(self):
self.variable = 123
def some_method(self):
print "my variable = ", self.variable
def some_other_method(self):
if self.variable > 1:
self.some_method()
成员函数中的self
引用是如何获得类成员变量和其他函数的 - 它是python引用其他语言调用this
的方式。
实例方法只能在实例上调用(它是以self
传入的实例)。您可以使用@classmethod
装饰器创建一个在类本身上调用的方法 - 而不是该类的任何特定实例。类方法也采用了一个参数,但它不是self
,而是对类的引用。您可以使用相同的方式获取在类级别定义的变量,这些变量由类的所有副本共享:
class HasShared(object):
shared = 99
@classmethod
def a_class_method(cls):
print cls.shared
(您可以在同一个类中混合使用类和实例方法)。
您还可以使用@staticmethod
装饰器制作静态方法。这些根本没有得到默认参数:
class NotPythonic(object):
@staticmethod
def needs_no_args():
print "call me as NotPythonic.needs_no_args()"
在Python中,我们倾向于避免使用这个公式,因为你可以通过在模块中创建一个函数来获得一个静态方法而不需要一个类来保存它们。对于你发布的示例代码,我可能只是使用实例方法创建一个常规类,因为你的函数需要gui小部件的名称才能真正问他们问题。