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

2024-09-25 08:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

当我没有self for sum(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?谢谢你的帮助。


Tags: inpytestselfaddreturnlineusers
2条回答

有几件事。

  1. 定义类方法时,它们必须将self作为第一个参数。
  2. 出错的部分是试图将B作为变量调用。B是一个类,你必须像其他类一样称呼它。这也适用于在类B中调用A()

修订代码:

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)

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

至于你的A.add_ff问题,你只需要像对B做的那样,把它实例化为一个类似A1的A对象,然后调用A1的方法。

相关问题 更多 >