python vs'this'的cpp / c#'Self'
我非常喜欢Python的OOP概念,所以我想知道Python的self
功能与CPP / C# this
关键字的功能类似。
除了必须明确地接收self
之外, self
和this
具有相同的目的。
Python是一种动态语言。 所以你可以添加成员到你的班级。 明确使用self
让您定义您是在本地作用域,实例作用域还是类作用域中工作。
和在C ++中一样,你可以明确地传递实例。 在下面的代码中, #1
和#2
实际上是相同的。 所以你可以使用方法作为正常的函数,没有歧义。
class Foo :
def call(self) :
pass
foo = Foo()
foo.call() #1
Foo.call(foo) #2
从PEP20开始: Explicit is better than implicit
。
请注意, self
不是关键字,您可以随意调用它,这只是一个惯例。
是的,他们实施相同的概念。 它们的目的是为类的实例提供一个句柄,在该类的实例上执行该方法。 或者,在其他措辞中,通过该方法被调用的实例。
可能有人更聪明会指出真正的差异,但对于一个非常普通的用户来说,pythonic self
基本上等同于c ++ *this
。
但是,在python中引用self的方式更明确。 例如它明确存在于方法声明中。 并且在被调用的对象实例上执行的方法调用必须使用self
来显式执行。
即:
def do_more_fun(self):
#haha
pass
def method1(self, other_arg):
self.do_more_fun()
这在c ++中看起来更像是:
void do_more_fun(){
//haha
};
void method1(other_arg){
do_more_fun();
// this->do_more_fun(); // also can be called explicitly through `this`
}
正如juanchopanza指出的那样, this
是c++
一个关键字,因此您不能真正使用其他名称。 这与其他差异成对,你不能忽略在c++
方法中传递this
。 唯一的方法就是使它静止。 这也适用于Python,但根据不同的惯例。 在python中,第1个参数总是被隐含地指定给自己。 所以你可以选择你喜欢的任何名字。 为了防止它,并能够在python中创建静态方法,您需要使用@staticmethod
装饰器(引用)。