[英]what gets returned when you return self?
当你在python类中返回'self'时返回什么? 我们在哪里使用返回'self'? 在下面的例子中,self会完全返回什么
class Fib:
'''iterator that yields numbers in the Fibonacci sequence'''
def __init__(self, max):
self.max = max
def __iter__(self):
self.a = 0
self.b = 1
return self
def __next__(self):
fib = self.a
if fib > self.max:
raise StopIteration
self.a, self.b = self.b, self.a + self.b
print(self.a,self.b,self.c)
return fib
关键字self
用于指代您正在调用方法的实例。
这对于链接特别有用。 在您的示例中,假设我们要在初始化的Fib
实例上调用__next__()
。 由于__iter__()
返回self
,因此以下内容是等效的:
obj = Fib(5)
obj.__iter__() # Initialize obj
obj.__next__()
和
obj = Fib(5).__iter__() # Create AND initialize obj
obj.__next__()
在您的特定示例中, self
关键字返回您从中调用__iter__()
的Fib
类的实例(在我的小片段中称为obj
)。
希望它会有所帮助。
Python将object.method()
等方法调用视为方法method(object)
。 文档说“调用xf()
完全等同于MyClass.f(x)
”。 这意味着方法将接收对象作为第一个参数。 按照惯例,在方法的定义中,第一个参数称为self
。
因此self
是拥有该方法的对象的常规名称。
现在,我们为什么要回归self
? 在您的特定示例中,这是因为对象实现了迭代器协议 ,这基本上意味着它具有__iter__
和__next__
方法。 __iter__
方法必须(根据文档)“返回迭代器对象本身”,这正是这里发生的事情。
另外,返回self
另一个常见原因是支持方法链接 ,你可以在其中执行object.method1().method2().method3()
,其中所有这些方法都在同一个类中定义。 这种模式在像熊猫这样的库中很常见。
部分答案 :
返回self
,返回类实例。 例如:
class Foo:
def __init__(self, a):
self.a = a
def ret_self(self):
return self
如果我创建一个实例并运行ret_self
,您将看到它们都引用同一个实例:
>>> x = Foo("a")
>>> x
<__main__.Foo instance at 0x0000000002823D48>
>>> x.ret_self()
<__main__.Foo instance at 0x0000000002823D48>
换句话说, x
和x.ret_self()
返回对该类实例的相同引用。
self
实际上是另一种说“这个Foo
实例”的方式。 因此,实例变量是类中的self.a
你什么时候需要这个? 我没有经验告诉你,我也不想提供我不确定的误导性信息。 我将把它留给其他人来解释这个答案。
请不要接受这个答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.