这些Python类方法输出的意义是什么?

时间:2019-03-19 16:49:36

标签: python class

假设我们有一个定义了三个方法的类:

class MyClass:

    def instance_method(self):
        return "Instance method called", self

    @classmethod
    def class_method(cls):
        return "Class method called", cls

    @staticmethod
    def static_method():
        return "Static method called"

我们实例化它并调用实例方法:

obj1 = MyClass()
obj1.instance_method()
# --> ('Instance method called', <__main__.MyClass at 0x106634588>)

然后我们调用类方法:

obj1.class_method()
# --> ('Class method called', __main__.MyClass)

我很难理解为什么实例方法用'<>'括起来,为什么当类方法没有时它为什么包含指向内存中位置的指针。

1 个答案:

答案 0 :(得分:1)

这三个都用于不同的目的。但是,让我们从这里开始:

class MyClass:
    def method(x):
        return "method called", x

当您有一个实例y = MyClass()并调用y.method()时,您对函数中的x有什么期望?

  • 如果您希望x是对象y,则它是实例方法;
  • 如果您希望该名称不是y而是y的类,则它是class方法(请记住,您无法再检查特定于y的任何内容,只有通用的东西因为全班都允许);和
  • 如果您希望什么都不做-您甚至不需要知道函数内部的对象yy的类,因此x甚至不需要知道存在-最适合静态方法。我们通常使用静态方法来执行函数通常可以执行的操作,但是请尝试将其包装在类下,以免污染全局名称空间。