gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:36:58 25 4
gpt4 key购买 nike

我正在 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. 使任何内部方法变量成为全局变量之前?

我 friend 也说我们可以用 @property在这种情况下,但我认为我还没有弄清楚。

最佳答案

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

来自 Python documentation :

Data attributes need not be declared; like local variables, they spring into existence when they are first assigned to.

虽然您的示例可以工作(如果您在 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 关键字的用途得到了很好的解释 herehere

另请注意,在 __init__ 方法内部初始化属性会将此属性绑定(bind)到类实例,而在 __init__ 方法外部初始化它会将其绑定(bind)到类本身,这是另一回事(参见 this discussion )。

关于python - 调用使用类中另一个方法的变量的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59622430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com