在python中调用不同类中的函数

在python中调用不同类中的函数,python,Python,这是我的密码。我是Python的初学者。我尝试在类Apple的func2和func3中调用func。在我搜索我的问题后,我发现它可以通过使用@staticmethod工作,但我想找出另一种不使用@staticmethod的方法。在func3中,我没有使用@staticmethod,因此它有一个错误:print(mycall.func3(3)) TypeError:func3()正好接受1个参数(给定2个) 有人知道如何解决我的问题吗?多谢各位 class mango: def func(

这是我的密码。我是Python的初学者。我尝试在类
Apple
func2
func3
中调用
func
。在我搜索我的问题后,我发现它可以通过使用
@staticmethod
工作,但我想找出另一种不使用
@staticmethod
的方法。在
func3
中,我没有使用
@staticmethod
,因此它有一个错误:
print(mycall.func3(3))
TypeError:func3()正好接受1个参数(给定2个)
有人知道如何解决我的问题吗?多谢各位

class mango:
    def func(self):
        a=8
        b=9
        return a+b       


class Apple:

    @staticmethod
    def func2(x,y):
        temp=mango()
        c=temp.func()
        z=x+y+c    
        return z


    def func3(val):
        temp = mango()
        d = temp.func()
        output = d + val
        return output


if __name__ == '__main__':

    print "Hello, Python!"

    a = []
    b =[]
    ans = Test(a,b)
    print(ans.cc)
    mycall = Apple()
    print(mycall.func2(2,3)) 
    print(mycall.func3(3) )

理想情况下,您应该使用
@staticmethod
decorator定义
func3
函数。但是既然您提到了,您不想将其定义为静态方法,为了修复错误,您可以将
self
定义为
func3
中的第一个参数。因此,
func3
的定义如下:

def func3(self, val):
# instead of > def func3(val):
原因是,当您调用以下函数时:

mycall.func3(3) 
Python将
mycall
的引用作为第一个参数传递,其余参数作为其余参数传递。函数将通过以下方式接收此调用:

func3(mycall, 3) 
因此,在上面的函数调用中,您传递了两个参数,但您当前的实现
func3
只接受一个参数。这一点也被错误地提到:

TypeError: func3() takes exactly 1 argument (2 given)
为什么我建议将其定义为静态方法,即使用
@staticmethod
decorator?
您当前没有在函数中使用对类实例(即
self
)的任何引用


必须阅读参考资料:


无论何时创建方法(实例的函数),都需要给它一个参数
self
。这就是它的工作原理

因此,您需要更改:

def func3(val):
致:


在类内部创建方法时(在本例中,是Apple内部的func2和func3),Python将第一个参数视为
self
,而不管您如何称呼该参数

基本上,正在发生的是:

class MyClass(object):
    #stuff
    def myfunc(self, arg1):
        #do stuff
        return arg1
然后,在
中,如果

mycall = MyClass()
print(mycall.myfunc(5)) #In this instance, 5 is passed as arg1 
因此,要修复代码,请尝试:

def func3(self, val):
        temp = mango()
        d = temp.func()
        output = d + val
        return output
值得一提的是,如果您不使用实例本身,那么您最好使用
@staticmethod


阅读更多内容:.

def funcx(self,par1,par2)
将self添加到类方法Btw:当您调用
mycall.func3(3)
时,它几乎像
func3(mycall,3)
一样处理,因此您需要
self
来获取
mycall
实例的函数将是一个更好的术语,而不是类的函数
def func3(self, val):
        temp = mango()
        d = temp.func()
        output = d + val
        return output