self指新创建的对象;在其他类方法中,它指的是调用其方法的实例。?

时间:2016-11-02 23:35:11

标签: python python-2.7 python-3.x

我在python中学习OOP并遵循thisthis stackoverflow答案和this post

在博文中,作家解释了这一点:

  

init 方法中,self引用新创建的对象;在   其他类方法,它指的是其方法的实例   调用。

我理解这一行的第一部分,但无法理解这一行的第二部分

  

"在其他类方法中,它指的是其方法为的实例   称为"

第二行是什么意思?有人可以用解释说明吗?

2 个答案:

答案 0 :(得分:1)

假设您上课:

class Rectangle():
    def __init__(self, height, width):
        self.height = height
        self.width = width

    def volume(self):
        return self.height * self.width

他们所说的并不是真的,只是让人感到困惑。

假设我们制作一个新的矩形:

rect = Rectangle(5, 4)

在这种情况下,self指的是新创建的矩形rect

如果我们调用volume的{​​{1}}方法...

rect

Python会将对象print rect.volume()注入rect变量,并使用self的高度和宽度。由于我们调用了rect的{​​{1}}方法,volume引用了rect

考虑用这些术语调用self可能会有所帮助:rect

我相信作者试图解释rect.volume()的机制,但可能会让它有点混乱。

答案 1 :(得分:1)

您引用的文字充其量只是令人困惑和误导。但这是一个例子。

class A(object):
    def p(self):
       print(self)

 a1 = A()        # create two instances
 a2 = A()
 a1.p()          # calls A.p(a1); self is a1
 a2.p()          # calls A.p(a2); self is a2

第二句的含义是self是对您调用方法的对象的引用:.之前的对象。 a1.p()A.p(a1)相同,a1传递的方法为self

我说你引用的内容误导的原因是它暗示__init__()与其他方法不同。不是。 __init__()是一种与其他方法一样的方法。它会自动传递它要操作的实例作为其第一个参数。只是在调用__init__()时它还没有名称,因为它在初始化之前没有给出名称。但是self仍然是实例。

真正与众不同的是__new__(),但如果有的话,你可能暂时不需要它。