调用未绑定方法时必须将实例作为第一个参数。Python

2024-09-24 22:19:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相对简单的类,它只是根据状态改变变量的值。在

class SetStates:

    def LM_State1():
        global p_LM1, p_LM2, p_LM3, p_RR1, p_RR2, p_RR3, p_RF1, p_RF2, p_RF3
        p_LM1 = Ra_L*P_j1_s1
        p_LM2 = P_j2_s1
        p_LM3 = P_j3_s1
        p_RR1 = Ra_R*(-1)*P_j1_s1
        p_RR2 = (-1)*P_j2_s1
        p_RR3 = (-1)*P_j3_s1
        p_RF1 = Ra_R*(-1)*P_j1_s1
        p_RF2 = (-1)*P_j2_s1
        p_RF3 = (-1)*P_j3_s1

最初我在类中调用函数,如下所示:

^{pr2}$

在意识到我需要初始化它现在看起来像这样。在

s=SetStates()

if LM_state == 1:
       s.LM_State1()

但我现在收到一个错误,指定它已被赋予1个参数,但应为0。我几乎可以肯定我错过了一些非常琐碎的事情。如果有人能把这个弄清楚那就太好了,谢谢


Tags: ralmj1j2s1state1j3rf1
1条回答
网友
1楼 · 发布于 2024-09-24 22:19:54

类方法(也就是说:在类定义中定义的任何def块)会自动作为它们的第一个参数传递给实例调用方(除非它被定义为^{},但我们不要搅浑这件事)。由于LM_State1()的函数定义不包括任何参数,Python抱怨您给了它一个参数(s),它不知道该如何处理。在

正如@BrenBarn在评论中提到的那样,如果你的类只是修改全局状态,那么从设计的角度来看就没有什么意义了,但是无论如何,这就是错误的原因。如果您真的需要这个(提示:您不需要),您应该考虑将它包装在一个模块中,导入该模块,并在该模块的顶层定义所有的set_state函数。在

# stateful.py

def set_state_1():
    ...

^{pr2}$

相关问题 更多 >