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”时,它看起来就错了?