TypeError:'class'对象不可调用

Bla*_*Ram 6 python module class

我有:

主要内容:

import music.umm
UMM = music.umm.UMM()
UMM.read_information()
Run Code Online (Sandbox Code Playgroud)

模块脚本:

    class UMM(object):

    def read_information(self):
    ..some code
    UMM.login()

UMM = UMM()
Run Code Online (Sandbox Code Playgroud)

使用此代码,运行主脚本时出现此错误:

TypeError:'UMM'对象不可调用

我如何解决它?

编辑:

我从模块中删除了这一行:

UMM = UMM()
Run Code Online (Sandbox Code Playgroud)

现在,主脚本运行功能模块,但如果脚本模块转到另一个功能,我会收到此错误:

TypeError:必须使用UMM实例作为第一个参数调用unbound方法login()(没有任何内容)

小智 9

我是这样做的:

# Module Code
class MyClass(object):
    def foo(self):
        print "Foo"


# Client Code
from MyClass import MyClass
inst = MyClass()
inst.foo()
Run Code Online (Sandbox Code Playgroud)

  • 这绝对给我带来了麻烦。Python 的做法与我使用的其他语言有很大不同,当我看到“from MyClass import MyClass”时,它看起来就是错误的。 (2认同)
  • 我们不能只做“导入MyClass”吗? (2认同)

glg*_*lgl 6

尽管您提供给我们的信息很少,我仍将尽力提供帮助。

SSCCE可能看起来像

umm.py:

class UMM(object):
    def login(self):
        print("login()")
    def read_information(self):
        print("read_info() 1")
        UMM.login()
        print("read_info() 2")
Run Code Online (Sandbox Code Playgroud)

主要脚本:

import umm
umm = umm.UMM()
umm.read_information()
Run Code Online (Sandbox Code Playgroud)

我没有测试它,但我想这会产生以下异常

TypeError: unbound method login() must be called with UMM instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)

原因是该UMM.login()方法希望通过对象的实例进行调用。

在内部read_information(),您拥有self一个具体的对象实例。这样您就可以取代通话

        UMM.login()
Run Code Online (Sandbox Code Playgroud)

        self.login()
Run Code Online (Sandbox Code Playgroud)

为了满足所有依赖关系。

对的调用UMM.login()会尝试在login()没有对象实例进行处理的情况下进行调用。这将适用于@staticmethod@classmethod,但不适用于常规绑定方法。