Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类中返回self方法-这种方法好吗?_Python_Class_Oop_Self - Fatal编程技术网

Python 在类中返回self方法-这种方法好吗?

Python 在类中返回self方法-这种方法好吗?,python,class,oop,self,Python,Class,Oop,Self,我有一个像下面这样的班级 class TestClass(object): def __init__(self, data): self.data = data def method_a(self, data): self.data += data/2 return self def method_b(self, data): self.data += data

我有一个像下面这样的班级

class TestClass(object):

    def __init__(self, data):
            self.data = data

    def method_a(self, data):
            self.data += data/2
            return self

    def method_b(self, data):
            self.data += data
            return self

    def method_c(self, data):
            self.data -= data
            return self
每个方法都返回self。我这样写的目的是为了在一个链中调用几个metohds,即object.method\u a10.method\u b12.method\u c11。我被告知方法中的returnself不会返回当前对象,而是创建一个新对象。真的是这样吗?在python方法中使用return-self是否是一种好的做法?

return-self不会创建新对象,您被告知错误

如果您想构建一个支持链接的API,那么返回self是一个很好的实践。您可能希望为链接API构建一个新对象,但这也不是必需的

有关SQLAlchemy库如何处理每次更改与新实例的链接,请参见。在改变链中的对象时创建一个新对象允许您重新使用部分变换作为应用了不同链变换的几个新对象的起点。

返回self不会创建一个新对象,您被告知错误

如果您想构建一个支持链接的API,那么返回self是一个很好的实践。您可能希望为链接API构建一个新对象,但这也不是必需的


有关SQLAlchemy库如何处理每次更改与新实例的链接,请参见。在改变链中的对象时创建一个新对象,允许您重新使用部分变换作为应用了不同链变换的几个新对象的起点。

返回self不会创建新对象


我相信有些人会告诉你方法链接是不好的。我不认为这一定是坏事。编写一个为方法链接而设计的API是一种选择,如果您决定这样做,您需要确保一切都按照人们的期望工作。但如果你决定这么做,那么回归自我通常是正确的选择。有时,您可能希望返回新创建的对象。这取决于您是否希望链式方法累积修改原始对象。

返回self不会创建新对象

我相信有些人会告诉你方法链接是不好的。我不认为这一定是坏事。编写一个为方法链接而设计的API是一种选择,如果您决定这样做,您需要确保一切都按照人们的期望工作。但如果你决定这么做,那么回归自我通常是正确的选择。有时,您可能希望返回新创建的对象。这取决于是否希望链式方法累积修改原始对象

真的是这样吗

不,它不会创建新对象,它将返回相同的实例。您可以使用is关键字进行检查,该关键字检查两个对象是否相同:

t = TestClass(3)
c = t.method_a(4)

print t is c
>>> True
在python方法中使用returnself是一种好的实践吗

是的,它通常用于允许链接

真的是这样吗

不,它不会创建新对象,它将返回相同的实例。您可以使用is关键字进行检查,该关键字检查两个对象是否相同:

t = TestClass(3)
c = t.method_a(4)

print t is c
>>> True
在python方法中使用returnself是一种好的实践吗

是的,它通常用于允许链接。

返回自我不创建新对象,您被告知错误。返回自我不创建新对象,您被告知错误。