类型错误:未绑定方法必须以实例作为第一个参数调用(得到的是整数实例而非)在Python 2中

2024-04-24 22:32:04 发布

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

在Python3中,下面的一组代码起作用,我想知道为什么在Python2.7中它会给我一个TypeError:unbound method add()必须用calc instance作为第一个参数来调用(改为get int instance)?如何在Python2.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)

Tags: instance代码answeradd参数getdefcalc
2条回答

对python2.7使用staticmethod

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)

它看起来像是试图用一堆静态函数实现一个类。你可以这样做,但真的没有必要。与其他语言不同,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

因此,您最好按照预期使用模块,而不要将类用作模块:-)。

相关问题 更多 >