当使用self
装饰器引用该方法时,我不明白为什么需要使用@staticmethod
。
例如,self.circle_area
方法中的area
方法。
class Pizza:
def __init__(self, radius, ingredients):
self.radius = radius
self.ingredients = ingredients
def area(self):
return self.circle_area(self.radius)
@staticmethod
def circle_area(r):
return r ** 2 * math.pi
答案 0 :(得分:0)
如果在不使用circle_area()
的情况下调用self
,则您的Python解释器将尝试查找具有全局范围的方法的名称。但是方法circle_area
是在类Pizza
中定义的,在全局范围中不可见,因此解释器无法访问它。通过将self
添加到方法调用中,可以指定要调用的方法所在的位置。
答案 1 :(得分:0)
你不知道。 self
和Pizza
指的是完全相同的事情(您可以做self.circle_area(self.radius)
)。但是,self
在惯例中更常用。
如果在不使用surface_area()
或self
的情况下调用pizza
,则会由于在全局范围中未定义surface_area()
而产生错误。