必须使用instance作为第一个参数调用unbound方法。 - Python

时间:2016-01-18 17:33:21

标签: python class

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

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

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

 if LM_state == 1:
    SetStates.LM_State1()

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

s=SetStates()

if LM_state == 1:
       s.LM_State1()

但是我现在收到一个错误,指出它已被赋予1个参数但预期为0.我几乎可以肯定我错过了一些非常微不足道的东西。如果有人能够清除它,那就太棒了,谢谢

1 个答案:

答案 0 :(得分:1)

类方法(也就是说:在类定义中定义的任何def块)会自动传递实例调用者作为它们的第一个参数(除非它定义为staticmethod但是不要让它混乱水域)。由于LM_State1()的函数定义不包含 任何 参数,因此Python会抱怨您给它一个参数(s),它没有我知道该怎么做。

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

# stateful.py

def set_state_1():
    ...

# main.py

import stateful

stateful.set_state_1()  # set the state!