当我没有使用 @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))
所以,我不知道静态方法是什么,所以我搜索了一下,然后做了这个
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))