我有:
主要说明:
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() 第一个参数(没有取而代之)
答案 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()