这两个例子有什么区别?

时间:2014-11-27 12:41:07

标签: python-2.7 static-methods

我正在阅读这篇Python教程 -

Static Method, Class Method

class Pizza(object):
    @staticmethod
    def mix_ingredients(x, y):
        return x + y

    def cook(self):
        return self.mix_ingredients(self.cheese, self.vegetables)

>>> Pizza().cook is Pizza().cook
False
>>> Pizza().mix_ingredients is Pizza.mix_ingredients
True
>>> Pizza().mix_ingredients is Pizza().mix_ingredients
True

我不太明白--->的结果Pizza()。cook是Pizza()。cook - >他们为什么不同?

和Pizza()。mix_ingredients是Pizza.mix_ingredients - >有支架和没有支架有什么区别?

最后,对于静态方法,为什么最终结果为True?

非常感谢!

1 个答案:

答案 0 :(得分:2)

考虑这一点的方法是将cook方法视为每Pizza个方法,而所有Pizza共享相同 {{1 }} @staticmethod

因此mix_ingrecdients会为您提供一个新披萨,因此Pizza()是特定披萨的烹饪方法(由Pizza().cook表示),所以,

self
因此

将是Pizza().cook is Pizza().cook

这部分回答了问题的下一部分。 Pizza是类型,Pizza()是该类型的实例。当您引用静态方法时,它提供相同的功能:

False

如果您尝试使用实例方法,您将获得“绑定”和“未绑定”功能。