关于python:为什么类中的方法即使没有用@class method或@staticmethod标记也能工作?

Why does a method within a class work even if not marked with @classmethod or @staticmethod?

我不熟悉Python,只是了解它的对象/类的实现。我理解实例方法、类方法和静态方法之间的区别,但我不理解的是,为什么没有修饰成@class method或@static method的方法可以从类本身调用。

我非常(非常)基本的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class TestClass:
    def __init__(self):
        pass


    @staticmethod
    def print_static_stuff(stuff):
        print(stuff)


    def print_stuff(stuff):
        print(stuff)


TestClass.print_stuff("stuff")  # prints"stuff"
TestClass.print_static_stuff("static stuff")  # prints"static stuff"

当对类调用方法print_stuff()时,它似乎充当一个静态方法,将参数作为单个参数,而不是类(cls)。为什么不能在类上调用未用@staticClass修饰的方法?这是出于设计还是只是一个奇怪的副作用,为什么?从我到目前为止所学到的,按照设计,Python几乎没有"奇怪的副作用"。


名为self的第一个参数只是一个约定。该实例将作为第一个位置参数传递,与您所命名的参数无关(在本例中,您称它为stuff)。