Python错误解除绑定方法?

Python错误解除绑定方法?,python,Python,如果我试图从中运行命令,它将显示以下错误: Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method runsingle() must be called with sandshell instance as first argument (got str instance instead) 回溯(最近一次呼叫最后一次): 文件“”

如果我试图从中运行命令,它将显示以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unbound method runsingle() must be called with sandshell instance as first argument (got str instance instead)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:必须以sandshell实例作为第一个参数调用未绑定的方法runsingle()(改为获取str实例)
谢谢你

尝试这样做:

import sandshell

instance = sandshell.sandshell()  # get an instance of the class
instance.runsingle("cd hi")       # call the method runsingle of the instance

首先需要有类的实例,然后可以在该实例上调用函数。

在Python中,实例方法需要使用一个特殊的第一个参数(通常称为
self
),该参数表示从中调用它们的实际实例对象

您可以将函数定义更改为:

def runsingle(self, command):
   ...
然后,常规使用将按预期工作,例如

ss = sandshell()
ss.runsingle(some_command)
因为特殊的
self
参数是在后台处理的(调用函数时不需要显式提供)

相反,如果您希望以静态方法运行该命令(意味着它不依赖于类对象或从中调用它的实例对象),因此它被称为
sandshell.runsingle(some_命令)
,而不首先创建
sandshell
类的实例,然后可以使用
staticmethod
装饰器:

@staticmethod
def runsingle(command):
    ...

其他类函数也是如此。

向我们展示您如何尝试运行该命令。这不起作用,因为这些方法是在没有
self
的情况下定义的。要么需要添加
self
,要么需要将其制作成
classmethod
并添加class参数,要么需要将其制作成
staticmethod
@Mr.F ok,但最后他没有实例。HemI只是说,如果您保持代码的原始函数定义不变,唯一的更改是先创建一个实例,然后尝试运行该函数,那么它将不起作用(并且会产生相同的错误)。@F先生,我理解,我没有尝试运行代码。但要点是一样的,他并没有实例。谢谢你们,但我在它不起作用之前试过了。但是,
self
确实很有效。