10

我有:

主脚本:

import music.umm

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

模块脚本:

class UMM(object):
    
    def read_information(self):
        # ..some code
        UMM.login()

UMM = UMM()

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

TypeError:“UMM”对象不可调用

我如何解决它?

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

UMM = UMM()

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

类型错误:必须使用 UMM 实例作为第一个参数调用未绑定的方法 login()(什么都没有)

4

5 回答 5

14

我就是这样做的:

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


# Client Code
from MyClass import MyClass
inst = MyClass()
inst.foo()
于 2016-09-01T17:25:13.050 回答
8

SSCCE 可能看起来像

嗯.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()没有对象实例的情况下调用。这适用于 a@staticmethod或 a @classmethod,但不适用于常规绑定方法。

于 2013-11-03T15:14:40.073 回答
0

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

尝试将您的班级命名为不同的名称:

class YourClass(object):
    ..functions..

然后初始化它:

var_class = YourClass()
于 2013-11-03T12:04:02.307 回答
0

您需要启动该类的一个实例。

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

UMM = UMM()

您可以通过执行以下操作来启动类的实例:

umm = UMM()

即不覆盖类名。

于 2019-07-25T09:40:11.440 回答
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()
于 2020-08-10T17:59:39.940 回答