调用使用类中另一个方法的变量的方法



我正在Maya中编写一个脚本,并尝试在另一个方法中分配变量,而不是像我们通常那样在__init__内部分配变量。我将 window 命令放在__init__中,因此当初始化新实例时,如果我们在__init__中分配变量,它将一直运行,而无需为变量分配我想要的值。

例如:

def __init__(self, windowID = 'selectsomething', title = 'select something'):
self.windowID = windowID
self.title = title
if cmds.window(self.windowID, exists = True):
cmds.deleteUI(self.windowID)

myWindow = cmds.window(self.windowID, title = self.title)
cmds.rowColumnLayout(numberOfColumns = 2, columnWidth = [(1, 300), (2, 100)],
columnAttach = [1, 'left', 10], columnSpacing = [1, 10],
rowSpacing = [1, 5])
cmds.button(label = "Apply", command = self.applyButton) #it should print out selected object
cmds.button(label = "Cancel", command = self.cancelButton)
cmds.showWindow(myWindow)
#now for example if I have a sel variable to store selected objects, it would actually return nothing cuz the code ran all the way through and didnt wait for me to select what I needed
sel = cmds.ls(selection = True) #this will return nothing

我的解决方案是在applyButton方法中分配变量,该方法将存储我选择的内容。我发现调用一个使用该方法本身另一个方法的变量的方法有点奇怪。

例如:

class Abc:
def func(*arg):
print(self.var)

def var(self):
self.var = 1
self.func()

abc = Abc()
abc.var()

现在代码正在运行,但是从方法本身调用使用var方法中的变量的func方法听起来是不是有点奇怪var

我还没有看到有人这样做。我的意思是没有类,函数内分配的变量会保留在该函数内,我们只能将其与return一起使用。但是看起来在类中我们可以通过在它前面添加self.来使任何内部方法变量全局化?

我的朋友还说我们可以在这种情况下使用@property,但我想我还没有弄清楚。

您需要注意,数据属性是类的隐式成员,因此在将它们分配到某个位置后,可以由同一类中的任何方法使用。

来自 Python 文档:

数据属性不需要声明;像局部变量一样,它们 当它们第一次被分配到时,就会出现。

虽然您的示例将起作用(如果您在Abc.func()之前调用Abc.var()(,恕我直言,像这样在类级别初始化变量会更好(请注意,我将其称为val以避免与方法名称混淆(:

class Abc:
val = 0
def func(self, *arg):
print(self.val)
def var(self):
self.val = 1
self.func()

self关键字的目的在这里和这里得到了很好的解释。

另请注意,在__init__方法中初始化属性会将此属性绑定到类实例,而在__init__方法外部初始化属性会将其绑定到类本身,这是另一回事(请参阅此讨论(。

最新更新