Python self

时间:2020-02-23 14:43:16  来源:igfitidea点击:

在本程序中,我们将研究Python self的用法。

Python self

Python不是为面向对象编程范例而设计的语言。
因此,在Python中创建静态方法不是直接的。
让我们看看如何完成此操作:

class Person:

  def static_method():
      print("This is a static method")

现在,要创建一种可以在真实的"人"对象上运行的方法,我们需要为其提供对该对象的引用。
因此,我们可以将self用作:

class Person:
      def object_method(self):
      print("I can do something with self.")

接下来,让我们看看如何使用它来访问类构造函数本身中的字段。

Python类自构造函数

Pythonself也可以用来引用类中的变量字段:

class Person:

  # name made in constructor
  def __init__(self, n):
      self.name = n

  def get_person_name(self):
      return self.name

在上面的代码片段中," self"是指整个" Person"类的名称变量。
请注意,如果我们在方法中有一个变量,则self将不起作用。
该变量仅在该方法运行时才存在,因此是该方法的局部变量。
为了定义全局字段(完整类的变量),我们需要在类方法之外定义它们。
请参阅python变量范围。

self是关键字吗?

" self"在Python中的很多地方都被使用,人们以为它是一个关键字。
但是与C++中的" this"不同," self"不是关键字。

实际上,我们可以为方法的第一个参数使用任何名称,但强烈建议您遵循将其称为" self"的约定。

这意味着最后一个类可以做成:

class Person:

  #name made in constructor
  def __init__(another, n):
      another.name = n;

  def get_person_name(another):
      return another.name

看看我这次如何使用"另一个"吗?它的工作方式与" self"完全相同。

我们应该将自己传递给方法吗?

上面的解释提出了一个新问题,我们是否应该将self传递给方法?让我们考虑Person类,其中包含定义为:

def something(another, arg1, arg2):
  pass

如果personMe是该类的实例,并且调用了personMe.something(arg1,arg2),则python在内部将其转换为:

Person.something(personMe, arg1, arg2)

" self"变量是指对象本身。