Python 类型错误:';类别';对象不可调用
我有: 主脚本:Python 类型错误:';类别';对象不可调用,python,class,module,Python,Class,Module,我有: 主脚本: import music.umm UMM = music.umm.UMM() UMM.read_information() import umm umm = umm.UMM() umm.read_information() 模块脚本: class UMM(object): def read_information(self): # ..some code UMM.login() UMM = UMM() 使用此代码,我在
import music.umm
UMM = music.umm.UMM()
UMM.read_information()
import umm
umm = umm.UMM()
umm.read_information()
模块脚本:
class UMM(object):
def read_information(self):
# ..some code
UMM.login()
UMM = UMM()
使用此代码,我在运行主脚本时出现以下错误:
import music.umm
UMM = music.umm.UMM()
UMM.read_information()
import umm
umm = umm.UMM()
umm.read_information()
TypeError:“UMM”对象不可调用
我怎么修理它
我从模块中删除以下行:
UMM = UMM()
现在,主脚本运行函数模块,但如果脚本模块转到另一个函数,则会出现以下错误:
TypeError:必须使用UMM实例作为调用未绑定的方法login()
第一个参数(没有得到任何结果)
class
是定义类的保留关键字
尝试为您的类命名不同的名称:
class YourClass(object):
..functions..
然后使用以下命令对其进行初始化:
var_class = YourClass()
SSCCE可能看起来像 嗯
class UMM(object):
def login(self):
print("login()")
def read_information(self):
print("read_info() 1")
UMM.login()
print("read_info() 2")
主脚本:
import music.umm
UMM = music.umm.UMM()
UMM.read_information()
import umm
umm = umm.UMM()
umm.read_information()
我没有对它进行测试,但我想这会产生以下异常
TypeError: unbound method login() must be called with UMM instance as first argument (got nothing instead)
原因是UMM.login()
是一个希望通过对象实例调用的方法
在read_information()
中,您将self
作为一个具体的对象实例。这样你就可以换电话了
UMM.login()
与
为了满足所有依赖关系
调用UMM.login()
将尝试在没有对象实例的情况下调用login()
。这适用于@staticmethod
或@classmethod
,但不适用于常规绑定方法。我就是这样做的:
# Module Code
class MyClass(object):
def foo(self):
print "Foo"
# Client Code
from MyClass import MyClass
inst = MyClass()
inst.foo()
您需要启动该类的一个实例 您试图通过以下方式执行此操作:
UMM = UMM()
您可以通过执行以下操作来启动该类的实例:
umm = UMM()
i、 e.不覆盖类名。可能是UMM是一种模块类型,而不是类对象。
你可以通过这样做看到它
print(music.umm.UMM) # will output type module
因此,解决方案是使用完整路径导入它:
from music.umm.UMM import UMM
print(UMM) # should output type class
umm_class_instance = UMM()
umm_class_instance.read_information()
建议不要使用python语句命名变量、函数和类,例如
class
为什么要使用UMM=UMM()
?它正在用类的实例覆盖类的名称,因此当您在脚本中导入它时,实际上是在导入实例(这是最后一行:UMM=UMM()
),而不是您的类。现在,我该怎么办?@Black\u Ram尽量详细。“如果脚本模块转到另一个函数”是什么意思?哪个功能?如果我们不知道情况,我们只能猜测。你可以贴一个标签,告诉我们你的代码部分之间的关系。你不明白。我写了“类”,例如,我的类的名称实际上是不同的。请告诉我们您的确切代码。如果你把一切都概括起来,我们不知道从哪里开始。谢谢!:-)这确实给我带来了麻烦。Python在这方面与我使用的其他语言有很大的不同,当我看到“从MyClass导入MyClass”时,它看起来就错了?