在两个类之间传递参数

时间:2016-02-09 05:46:32

标签: python class oop

我有一个具有这种结构的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)

3 个答案:

答案 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