我在python中学习OOP并遵循this和this stackoverflow答案和this post
在博文中,作家解释了这一点:
在 init 方法中,self引用新创建的对象;在 其他类方法,它指的是其方法的实例 调用。
我理解这一行的第一部分,但无法理解这一行的第二部分
"在其他类方法中,它指的是其方法为的实例 称为"
第二行是什么意思?有人可以用解释说明吗?
答案 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__()
,但如果有的话,你可能暂时不需要它。