无法从其他类

时间:2016-11-04 22:23:44

标签: python class inheritance

我想制作扩展旧API的API。我有两个文件, old_API 和我的新 my_API 。我想使用API​​文件中的所有函数,所以我继承了它。我现在可以使用继承类中包含的所有函数。但我无法访问超类的私有类变量函数。

old_API文件

class API:
   def __init__(self):
       self._foo = {}

    def add_Foo(self, arg):
        self._foo = Bar(self) # I need to access this instance 
        return self._foo[arg]

class Bar:
    def some_function(self, input: str):
    # This the function I want to use!

my_API文件

class Baz(API):
    def __init__(self):
        super(Baz, self).__init__(self):

    def add_Foo(self, arg):
        super(Baz, self).add_Foo(self, arg)

使用my_API时

from my_API import Baz

my_robot = Baz("Argument")
robot_foo = my_robot.add_Foo(arg)

robot_foo.some_function(input) # This does not work!

如果我直接使用旧API并执行相同的操作,那么一切正常。

使用old_API时

from old_API import API

my_robot = API("Argument")
robot_foo = my_robot.add_Foo(arg)

robot_foo.some_function(input) # This does work.

2 个答案:

答案 0 :(得分:1)

你的方法:

def add_Foo(self, arg):
    super(Baz, self).add_Foo(self, arg)

需要将调用的返回值返回到add_Foo

def add_Foo(self, arg):
    return super(Baz, self).add_Foo(self, arg)

另外我认为你的方法:

def add_Foo(self, arg):
    self._foo = Bar(self) # I need to access this instance 
    return self._foo[arg]

应该是:

def add_Foo(self, arg):
    self._foo[arg] = Bar(self) # I need to access this instance 
    return self._foo[arg]

否则你会用一个Bar替换字典。

答案 1 :(得分:0)

你错了super()。它应该是 super(Baz, self).add_Foo(self, arg)。阅读python docs

了解更多信息