如果我们在python中的类中创建任何方法,我们总是使用self作为第一个参数,但是在调用该方法时我们不传递?为什么?

如果我们在python中的类中创建任何方法,我们总是使用self作为第一个参数,但是在调用该方法时我们不传递?为什么?,python,self,Python,Self,输出:在xyz中 在这里,当使用obj调用xyz时,self不是作为参数给出的,这是因为默认情况下,self是实例本身obj.xyz()相当于ABC.xyz(obj),这是因为self默认情况下是实例本身obj.xyz()相当于ABC.xyz(obj)每个类方法的第一个参数,包括\uuuuu init\uuuuu,始终是对类的当前实例的引用 按照惯例,此参数始终命名为self 在\uuuu init\uuuu方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定

输出:
在xyz中


在这里,当使用
obj
调用
xyz
时,
self
不是作为参数给出的,这是因为默认情况下,
self
是实例本身
obj.xyz()
相当于
ABC.xyz(obj)

,这是因为
self
默认情况下是实例本身
obj.xyz()
相当于
ABC.xyz(obj)

每个类方法的第一个参数,包括
\uuuuu init\uuuuu
,始终是对类的当前实例的引用

按照惯例,此参数始终命名为
self

\uuuu init\uuuu
方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定义方法时需要显式指定
self
,但在调用方法时不指定它;Python会自动为您添加它


了解有关
self
和的详细信息每个类方法的第一个参数,包括
\uuuu init\uuuu
,始终是对类的当前实例的引用

按照惯例,此参数始终命名为
self

\uuuu init\uuuu
方法中,self指的是新创建的对象;在其他实例方法中,它引用其方法被调用的实例。虽然在定义方法时需要显式指定
self
,但在调用方法时不指定它;Python会自动为您添加它


了解更多关于
自我的信息

从技术上讲,就是这样:

  • 它尝试评估对象xyz
  • 它保证对象
    obj
    没有名为
    xyz
  • 然后,它在
    obj
    的类(
    ABC
    )中查找名为
    xyz
    的属性,它确实具有该属性
  • ABC.xyz
    是一个函数,因此它将其“包装”到“实例方法”中。基本上,
    ABC.xyz
    是一个只有一个参数的函数(
    self
    ),因此“实例方法”是一个从原始函数中减去一个参数的函数(在这种情况下没有参数),它会记住对象
    obj
    。如果调用这个“实例方法”,它会将其传递到
    ABC.xyz
    ,第一个参数是
    obj
    ,其余参数是绑定方法的参数
  • obj.xyz
    计算到此实例方法
  • 您可以调用此实例方法,该方法调用
    ABC.xyz
    ,并将记住的实例(
    obj
    )作为第一个参数
  • 以下是语言参考中的相关部分(滚动自):

    类实例

    类实例是通过调用类对象创建的(见上文)。类实例有一个命名空间,该命名空间实现为 搜索属性引用的第一个位置。当 属性,并且实例的类具有 属性,则搜索将继续该类 属性。如果找到用户定义的类属性 函数对象,将其转换为实例方法对象 其
    \uuuu self\uuuu
    属性是实例。[……]

    实例方法

    [……]

    通过检索用户定义的 通过类的一个实例(它的
    \uuuuu self\uuuu
    属性是实例,方法对象被称为绑定。 新方法的
    \uuu func\uu
    属性是原始函数对象

    [……]

    调用实例方法对象时,底层函数 调用(
    \uuuuu func\uuuu
    ),将类实例(
    \uuuu self\uuu
    )插入 在参数列表的前面。例如,当
    C
    是一个 包含函数
    f()
    的定义,
    x
    C
    ,调用
    x.f(1)
    相当于调用
    C.f(x,1)

    [……]


    从技术上讲,情况就是这样:

  • 它尝试评估对象xyz
  • 它保证对象
    obj
    没有名为
    xyz
  • 然后,它在
    obj
    的类(
    ABC
    )中查找名为
    xyz
    的属性,它确实具有该属性
  • ABC.xyz
    是一个函数,因此它将其“包装”到“实例方法”中。基本上,
    ABC.xyz
    是一个只有一个参数的函数(
    self
    ),因此“实例方法”是一个从原始函数中减去一个参数的函数(在这种情况下没有参数),它会记住对象
    obj
    。如果调用这个“实例方法”,它会将其传递到
    ABC.xyz
    ,第一个参数是
    obj
    ,其余参数是绑定方法的参数
  • obj.xyz
    计算到此实例方法
  • 您可以调用此实例方法,该方法调用
    ABC.xyz
    ,并将记住的实例(
    obj
    )作为第一个参数
  • 以下是语言参考中的相关部分(滚动自):

    类实例

    类实例是通过调用类对象创建的(见上文)。类实例有一个命名空间,该命名空间实现为 搜索属性引用的第一个位置。当 属性,并且实例的类具有 属性,则搜索将继续该类 属性。如果找到用户定义的类属性 函数对象,将其转换为实例方法对象 谁的class ABC: def xyz(self): print "in xyz" obj = ABC() print obj.xyz()