繁体   English   中英

当你回归自我时会得到什么?

[英]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>

换句话说, xx.ret_self()返回对该类实例的相同引用。

self实际上是另一种说“这个Foo实例”的方式。 因此,实例变量是类中的self.a

你什么时候需要这个? 我没有经验告诉你,我也不想提供我不确定的误导性信息。 我将把它留给其他人来解释这个答案。

请不要接受这个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM