TypeError:'class'对象不可调用

时间:2013-11-03 11:53:20

标签: python class module

我有:

主要说明:

import music.umm
UMM = music.umm.UMM()
UMM.read_information()

MODULE SCRIPT:

    class UMM(object):

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

UMM = UMM()

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

  

TypeError:'UMM'对象不可调用

我该如何解决?

编辑:

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

UMM = UMM()

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

  

TypeError:必须使用UMM实例调用未绑定方法login()   第一个参数(没有取而代之)

5 个答案:

答案 0 :(得分:8)

我就是这样做的:

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


# Client Code
from MyClass import MyClass
inst = MyClass()
inst.foo()

答案 1 :(得分:4)

尽管您提供的信息很少,但我仍在努力提供帮助。

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")

主脚本:

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()

        self.login()

以实现所有依赖关系。

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

答案 2 :(得分:0)

class是用于定义类的保留关键字。

尝试将您的课程命名为不同的内容:

class YourClass(object):
    ..functions..

然后用:

初始化它
var_class = YourClass()

答案 3 :(得分:0)

您需要启动该类的实例。

您尝试通过以下方式做到这一点:

UMM = UMM()

您可以通过执行以下操作来初始化该类的实例:

umm = UMM()

即不覆盖类名。

答案 4 :(得分:0)

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()