在python 3中,下面的一组代码可以工作,我想知道为什么在python 2.7中它给了我一个TypeError:unbound方法add()必须用calc实例作为第一个参数调用(改为使用int实例)?我如何在Python 2.7中解决这个问题?
class calc:
def add(x,y):
answer = x + y
print(answer)
def sub(x,y):
answer = x - y
print(answer)
def mult(x,y):
answer = x * y
print(answer)
def div(x,y):
answer = x / y
print(answer)
calc.add(5, 7)
答案 0 :(得分:5)
在你的情况下使用staticmethod
用于python2.7
class calc:
@staticmethod
def add(x,y):
answer = x + y
print(answer)
#call staticmethod add directly
#without declaring instance and accessing class variables
calc.add(5,7)
或者,如果您需要调用其他实例方法或使用类
中的任何内容,请使用instance method
class calc:
def add(self,x,y):
print(self._add(x,y)) #call another instance method _add
def _add(self,x,y):
return x+y
#declare instance
c = calc()
#call instance method add
c.add(5,7)
此外,如果您需要使用类变量但不声明实例
,请使用classmethod
class calc:
some_val = 1
@classmethod
def add_plus_one(cls,x,y):
answer = x + y + cls.some_val #access class variable
print(answer)
#call classmethod add_plus_one dircetly
#without declaring instance but accessing class variables
calc.add_plus_one(5,7)
答案 1 :(得分:2)
它看起来就像你试图用一大堆静态函数实现一个类。你可以这样做,但确实没有必要。与其他语言不同,python不需要类来运行。您可以在没有类的情况下定义方法:
def add(x, y):
answer = x + y
print(answer)
add(5, 7)
由于在python中导入工作的方式,命名空间的基本单位是模块,而不是类。
from module import some_class # works.
from module import submodule # works.
from module.some_class import method # doesn't work
所以,你总是会更好地使用模块,而不是使用类作为模块: - )。