当我没有使用 @staticmethod 装饰器时,为什么我的减法函数在静态上下文中工作?

Why is my subtract function working in a static context when I haven't used the @staticmethod decorator?

所以,我不知道静态方法是什么,所以我搜索了一下,然后做了这个

class Calculator:
    def __init__(self,num1,num2):
        self.num1 = num1
        self.num2 = num2

    @staticmethod
    def add(x,y):
        result = x + y
        return result

    def sub(x,y):
        result = x-y
        return result

print(Calculator.add(3,4))
print(Calculator.sub(5,7))

我的问题是为什么即使没有 @staticmethod 装饰器,sub 方法也能在静态上下文中工作?是不是和sub方法没有使用self.num1或者self.num2有关系还是我实现的不对?

您看不出区别,因为您没有实例化对象(Calculator 是 class,Calculator() 是对象)。

请参阅以下代码段:

class Calculator:
    @staticmethod
    def add(x,y):
        result = x + y
        return result

    def sub(x,y):
        result = x-y
        return result

print(Calculator().add(3,4))
print(Calculator().sub(5,7))

add 的调用会起作用,但对 sub 的调用会收到一个额外的第一个参数。

另一个例子可以在评论中说明你的问题:
class Calculator:
    @staticmethod
    def add(x,y):
        result = x + y
        return result
    def sub(self,x,y):
        result = x-y
        return result

print(Calculator().add(3,4))
print(Calculator().sub(5,7))
print(Calculator.sub(None,5,7))