想想这个例子:
class MyClass:
def func(self, name):
self.name = name
我知道self引用MyClass的特定实例。但是为什么func必须显式地包含self作为参数呢?为什么我们需要在方法的代码中使用self ?其他一些语言将其隐式化,或者使用特殊的语法。
有关设计决策的语言无关性考虑,请参见强制显式使用this/self指针的好处是什么?
要关闭OP省略方法的self形参并获得TypeError的调试问题,请使用TypeError: method()接受1个位置参数,但给出了2个。如果OP省略了self。在方法体中得到一个NameError,考虑如何在类中调用函数?
假设你有一个类ClassA,它包含一个方法methodA,定义为:
def methodA(self, arg1, arg2):
# do something
objectA是这个类的一个实例。
现在当objectA。当调用methodA(arg1, arg2)时,python会在内部将其转换为:
ClassA.methodA(objectA, arg1, arg2)
self变量引用对象本身。
假设你有一个类ClassA,它包含一个方法methodA,定义为:
def methodA(self, arg1, arg2):
# do something
objectA是这个类的一个实例。
现在当objectA。当调用methodA(arg1, arg2)时,python会在内部将其转换为:
ClassA.methodA(objectA, arg1, arg2)
self变量引用对象本身。
以下摘自关于self的Python文档:
As in Modula-3, there are no shorthands [in Python] for referencing the object’s members from its methods: the method function is declared with an explicit first argument representing the object, which is provided implicitly by the call.
Often, the first argument of a method is called self. This is nothing more than a convention: the name self has absolutely no special meaning to Python. Note, however, that by not following the convention your code may be less readable to other Python programmers, and it is also conceivable that a class browser program might be written that relies upon such a convention.
有关更多信息,请参阅Python类文档教程。