为什么在python类中使用@staticmethod装饰器引用方法时,我们需要self?

时间:2019-11-07 05:02:58

标签: python static

当使用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

2 个答案:

答案 0 :(得分:0)

如果在不使用circle_area()的情况下调用self,则您的Python解释器将尝试查找具有全局范围的方法的名称。但是方法circle_area是在类Pizza中定义的,在全局范围中不可见,因此解释器无法访问它。通过将self添加到方法调用中,可以指定要调用的方法所在的位置。

答案 1 :(得分:0)

你不知道。 selfPizza指的是完全相同的事情(您可以做self.circle_area(self.radius))。但是,self在惯例中更常用。

如果在不使用surface_area()self的情况下调用pizza,则会由于在全局范围中未定义surface_area()而产生错误。

相关问题