我想制作扩展旧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.
答案 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