What's the significance of these Python class method outputs?
本问题已经有最佳答案,请猛点这里访问。
假设我们有一个定义了三个方法的类:
1 2 3 4 5 6 7 8 9 10 11 12 | 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" |
我们实例化它并调用实例方法:
1 2 3 | obj1 = MyClass() obj1.instance_method() # --> ('Instance method called', <__main__.MyClass at 0x106634588>) |
然后我们调用类方法:
1 2 | obj1.class_method() # --> ('Class method called', __main__.MyClass) |
我很难理解为什么实例方法被"<>"括起来,以及为什么它包含指向内存中某个位置的指针,而类方法却没有。
这三个都有不同的用途。但让我们从这个开始:
1 2 3 | class MyClass: def method(x): return"method called", x |
当您有一个实例
- 如果希望
x 是y 的对象,则是实例方法; - 如果您希望它不是
y ,而是y 的类,那么它就是类方法(记住,您不能再检查任何特定于y 的内容,只允许使用整个类的通用内容);并且 - 如果您希望它不存在——您甚至不需要知道函数内部的对象
y ,也不需要知道y 的类,因此x 甚至不应该存在——这将是最适合静态方法的方法。我们通常对函数可以做的事情使用静态方法,但是尝试将其包装在类中,这样它就不会污染全局名称空间。