首页 > 解决方案 > 使用子类实例对象调用父类方法时获取 NoneType 返回值

问题描述

我编写了一个带有方法的类,该方法仅在我希望它们覆盖父类的某些方法时才覆盖它们。其他时候,我调用该方法的 super 以便只执行在父类方法中编写的内容。我观察到这在我存储数据时有效,但在我检索数据时无效。显示确切问题的简化版:

# parent class
class A(object):
    def __init__(self):
        self.var = {}
    def assigner_method(self, value):
        self.var = value
    def returning_method(self):
        return self.var

# child class
class B(A):
    def returning_method(self):
        #Do nothing
        super(B, self).returning_method()

# What obviously works
class C(object):
    def some_method(self):
        self.obj = A()
        self.obj.assigner_method("ABCD")
        resp = self.obj.returning_method()
        print resp

# What doesn't work:
class D(object):
    def some_method(self):
        self.obj2 = B()
        self.obj2.assigner_method("ABCD")
        resp = self.obj2.returning_method()
        print resp

现在,这有效:

print C().some_method()
ABCD

这失败了:

print D().some_method()
None

在这里和那里放一些打印,我看到使用 self.obj2 设置数据 self.var 是可行的。同样,当使用 self.obj2 获取数据时,父类返回_method 会打印returning data ABCD,但是当在调用者处打印时,它说接收到的数据是 NoneType。我想我在这里做了一些根本性的错误。任何帮助表示赞赏。

标签: pythonpython-2.7inheritance

解决方案


推荐阅读