在python中调用不同类中的函数
这是我的密码。我是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(
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