假设我们有一个定义了三个方法的类:
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)
我很难理解为什么实例方法用'<>'括起来,为什么当类方法没有时它为什么包含指向内存中位置的指针。
答案 0 :(得分:1)
这三个都用于不同的目的。但是,让我们从这里开始:
class MyClass:
def method(x):
return "method called", x
当您有一个实例y = MyClass()
并调用y.method()
时,您对函数中的x
有什么期望?
x
是对象y
,则它是实例方法; y
而是y
的类,则它是class方法(请记住,您无法再检查特定于y
的任何内容,只有通用的东西因为全班都允许);和y
或y
的类,因此x
甚至不需要知道存在-最适合静态方法。我们通常使用静态方法来执行函数通常可以执行的操作,但是请尝试将其包装在类下,以免污染全局名称空间。