python vs'this'的cpp / c#'Self'

我非常喜欢Python的OOP概念,所以我想知道Python的self功能与CPP / C# this关键字的功能类似。


除了必须明确地接收self之外, selfthis具有相同的目的。

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指出的那样, thisc++一个关键字,因此您不能真正使用其他名称。 这与其他差异成对,你不能忽略在c++方法中传递this 。 唯一的方法就是使它静止。 这也适用于Python,但根据不同的惯例。 在python中,第1个参数总是被隐含地指定给自己。 所以你可以选择你喜欢的任何名字。 为了防止它,并能够在python中创建静态方法,您需要使用@staticmethod装饰器(引用)。

链接地址: http://www.djcxy.com/p/55147.html

上一篇: 'Self' of python vs 'this' of cpp/c#

下一篇: Unbound method must be called with instance as first a