类方法中的“self”参数是什么?
self
引用从类创建的特定对象实例。但是,为什么每个方法都必须显式包含为参数呢?self
class MyClass:
def func(self, name):
self.name = name
相反,在 Ruby 中,没有 :self
class MyClass
def func(name)
@name = name
end
end
self
引用从类创建的特定对象实例。但是,为什么每个方法都必须显式包含为参数呢?self
class MyClass:
def func(self, name):
self.name = name
相反,在 Ruby 中,没有 :self
class MyClass
def func(name)
@name = name
end
end
您需要使用的原因是因为Python不使用语法来引用实例属性。Python决定以一种使方法所属的实例自动传递但不自动接收的方式执行方法:方法的第一个参数是调用方法的实例。这使得方法与函数完全相同,并将实际名称留给您使用(尽管这是惯例,当您使用其他内容时,人们通常会对您皱眉头。 对代码来说并不特殊,它只是另一个对象。self.
@
self
self
Python本可以做一些其他的事情来区分普通名称和属性 - 像Ruby这样的特殊语法,或者像C++和Java那样需要声明,或者可能更不同的东西 - 但它没有。Python的全部目的是使事情变得明确,使其明显是什么,尽管它没有完全在任何地方都这样做,但它确实在例如属性方面做到了这一点。这就是为什么分配给实例属性需要知道要分配给哪个实例的原因,这就是为什么它需要 .self.
假设您有一个类,其中包含一个定义为以下内容的方法:ClassA
methodA
def methodA(self, arg1, arg2):
# do something
并且是此类的一个实例。ObjectA
现在调用 时,python 会在内部将其转换为:ObjectA.methodA(arg1, arg2)
ClassA.methodA(ObjectA, arg1, arg2)
变量引用对象本身。self