我有一个具有这种结构的python程序:
import sys
class A:
def __init__(self):
...
def func(self, other, args):
z = something
n = B.start(z)
print n
def other_funcs(self, some, args):
...
class B:
def __init__(self):
self.start(z)
def start(self, z)
k = something
return k
if __name__ == '__main__'
A()
当我生成z
时,我想将它交给B类,然后B再次为我返回k。
但错误存在:
TypeError: unbound method start() must be called with B instance as first argument (got list instance instead)
答案 0 :(得分:2)
IIUC,你在这里寻找的是classmethod
。
问题是你没有B
对象,而只有B
类。你需要一个B
的方法,它接受一个类,而不是一个实例。像这样定义start
:
@classmethod
def start(cls, z):
例如,运行正常:
class A:
def func(self):
n = B.start(0)
class B:
@classmethod
def start(cls, z):
pass
if __name__ == '__main__':
A().func()
答案 1 :(得分:2)
或者,您可以初始化"/"
对象:
B
但是,您的n = B().start(z)
方法调用带有参数__init__
start
的{{1}}可能无效,因为z
尚未定义。
答案 2 :(得分:1)
您可以修改类__init__
的{{1}}以获取将B
传递给它的参数。
z
您的代码存在一些问题。
您需要了解class B:
__init__(self, z): #Pass 'z' when you create an object a 'class B' in 'class A'
是什么以及何时被调用。
constructor
这只会调用if __name__ == '__main__': # Fixed missing colon here
A()
的{{1}}函数。
您需要使用类似
的内容__init__
在类中使用方法的正确方法是创建对象(但类方法不需要)。在您的class A
中
A().func() # Pass required arguments here
这不起作用。
您需要在class A
中使用n = B.start(z) # Line in func() of class A
的必填参数致电B()
,而不仅仅是__init__
。
示例代码从class B
传递消息并从B
打印:
class A