调用object方法的Python3.5函数返回None而不是object

时间:2016-07-14 17:49:11

标签: python python-3.x return

我有一个类和一个试图更新并返回此类实例的函数:

updater()

但是调用None会返回Foo而不是类type(updater(Foo())) #NoneType 的实例。为什么是这样?我可以改变什么来获得理想的结果?

{{1}}

3 个答案:

答案 0 :(得分:1)

您的update方法不返回任何内容,在Python中意味着它隐式返回None。如果您希望它具有有意义的返回值,则必须明确地这样做。 E.g:

def update(self):
    self.datum = 'b' if self.datum == 'a' else 'a'
    return self.datum

答案 1 :(得分:1)

更新方法更新程序。

def updater(foo_obj):
    foo_obj.update()
    return( foo_obj )

来自班级职能的return self

def update(self):
        self.datum = 'b' if self.datum == 'a' else 'a'
        return self

答案 2 :(得分:0)

如果您希望update返回Foo类的实例,则必须使用return语句明确地返回它,否则它将隐式返回None(即它是一个void方法,即使Python不使用这些术语,因为鸭子打字)。这样做:

def update(self):
    self.datum = 'b' if self.datum == 'a' else 'a'
    return self

如果你不希望你的班级这样做,你也可以在Foo中返回updater对象,如下所示:

def updater(foo_obj):
    foo_obj.update()
    return foo_obj

如果您只想返回self.datum而不是整个对象,请执行以下操作:

def update(self):
    self.datum = 'b' if self.datum == 'a' else 'a'
    return self.datum

或类似地:

def updater(foo_obj):
    foo_obj.update()
    return foo_obj.datum