可以调用一个使用类中另一个方法的变量的方法吗?

时间:2020-01-07 05:03:31

标签: python class variables methods maya

我正在用Maya编写脚本,并试图在另一个方法内而不是像往常一样在__init__内分配变量(我将窗口命令放在__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()

现在代码运行良好,但是从func方法本身调用使用var方法中的变量的var方法听起来不是很奇怪吗?我以前没见过有人做过。我的意思是,没有类,在函数内部分配的变量将保留在该函数内部,并且我们只能将其与return一起使用。但是看起来在课堂上我们可以通过在内部添加self.来使任何内部方法变量成为全局变量?

我的朋友还说过,在这种情况下,我们可以使用@property,但我认为我还没有想到。有人有什么主意吗?

非常感谢你们,新年快乐!!

1 个答案:

答案 0 :(得分:1)

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

Python documentation

数据属性不需要声明;像局部变量一样 首次分配给它们时就应运而生。

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

val

herehere很好地说明了class Abc: val = 0 def func(self, *arg): print(self.val) def var(self): self.val = 1 self.func() 关键字的用途。

还请注意,在self方法内部初始化属性会将其绑定到类实例,而在__init__方法外部初始化属性将将其绑定到类本身,这是不同的事物(请参阅this discussion)。