【问题标题】:Why should I use "self" in a function? [duplicate]为什么要在函数中使用“self”? [复制]
【发布时间】:2015-09-22 13:20:44
【问题描述】:

关于这段代码我有两个问题:

class Enemy
    def __init__ (self, x):
         self.energy=x

jason=Enemy(5)     
  1. 为什么在创建函数和实例变量时必须使用self?使用它的目的是什么?

  2. 当我们创建jason 对象时,我们为其分配了5 的生命周期,即Enemy(5)。但是,类名可以在里面取变量吗?或者是 __init__ 功能使它成为可能? (当我们声明类时,我希望类似 class Enemy (x))。

【问题讨论】:

  • self 引用当前对象。
  • docs.python.org/3/tutorial/classes.html。请注意,由于缺少冒号,因此您的代码无论如何都不会工作。
  • 但如果我不创建 jason,我就没有对象。那时 self 指的是什么?
  • @ArdaBoğa 如果你没有创建jason,你就不会调用Enemy.__init__,所以没关系!声明一个方法就像声明一个函数 - 你现在定义参数,稍后将传递给它。
  • 谢谢,现在说得通了。

标签: python methods


【解决方案1】:

在python中,对于类方法,第一个参数(通常人们命名为self)是指用于调用函数的类的实例(对象),它不必命名为self,但这就是约定。

例子-

>>> class CA:
...     def __init__(someotherself, i):
...             print(someotherself)
...             print(i)
...             someotherself.i = i
...
>>> CA(1)
<__main__.CA object at 0x00514A90>
1
<__main__.CA object at 0x00514A90>

当你做类似 -

self.energy=x

您正在将self(表示您当前的对象)内的energy 变量设置为x。

当你这样做时 -

jason=Enemy(5)

Python 在内部调用 Enemy 的 __init__() 方法,其中 x 的值为 5(并且 self 作为当前对象)。 __init__() 在由 __new__() 方法创建对象后调用,这是一个类方法,一个帮助理解 newinit 如何工作的 SO 问题 - Python's use of __new__ and __init__?

【讨论】:

  • __new__ 不是静态方法,是类方法
  • 感谢您的所有回复!我现在明白了“self”是指要在程序中创建的对象。
猜你喜欢
  • 2012-02-08
  • 2013-06-26
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2023-03-04
  • 2013-08-23
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多