如何在python中调用另一个类的函数

时间:2015-03-12 01:07:55

标签: python class

class A:
  def add_f(self,a,b):
    return a+b

class B:
  def sum_f(self,a,b,c):
    return A.add_f(a,b) + c

B1= B()    
print B1.sum_f(1,2,3)


Traceback (most recent call last):
File "C:/Users/wxu/Documents/test.py", line 10, in <module>
print B1.sum_f(1,2,3)
File "C:/Users/wxu/Documents/test.py", line 7, in sum_f
return A.add_f(a,b) + c
TypeError: unbound method add_f() must be called with A instance as first argument (got int instance instead)

当我没有自己为sum_f(self,a,b,c)时,它给了我这个错误:

Traceback (most recent call last):
File "C:/Users/wxu/Documents/test.py", line 10, in <module>
print test1.sum_f(1,2,3)
TypeError: sum_f() takes exactly 3 arguments (4 given)

为什么? 以及如何从B类中的A类调用函数add_f?谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

有一些事情。

  1. 定义类方法时,必须self作为第一个参数。
  2. 您遇到错误的部分是您尝试将B称为变量的位置。 B是一个类,你必须像任何其他类一样调用它。当您在B类中调用A()时,这也适用。
  3. 修订代码:

    class A:
        def add_f(self, a, b):
            return a + b
    
    class B:
        def sum_f(self, a, b, c):
            return A().add_f(a, b) + c
    
    print B().sum_f(1, 2, 3)
    

    更新: 感谢您接受我的建议,但您仍然遗漏了一些东西。在B类中,你从A类调用一个方法,但你也需要括号!在B类中,按类别调用A类:

    A().add_f(a, b)

答案 1 :(得分:0)

简单修复,您只需打开和关闭类声明中的括号,因此class B变为class B()(同样的事情应用于A类)。此外,您需要添加某种变量(如self)作为在类中声明的每个方法的第一个参数。你永远不需要传递任何东西作为填充self的第一个参数,因为python会为你做。

至于你的A.add_f问题,你只需像对B一样做,并将A对象实例化为A1,然后调用A1的方法。