Python 在派生类中传递*args/**kwargs

Python 在派生类中传递*args/**kwargs,python,inheritance,Python,Inheritance,我需要了解以下行为 Traceback (most recent call last): File "FactoryTest.py", line 7, in <module> swift = FactoryLogs.get_service('freezer') File "/home/iob/Devel/elastic_tests/elasticFactory.py", line 12, in get_service return Factory.create

我需要了解以下行为

Traceback (most recent call last):
  File "FactoryTest.py", line 7, in <module>
    swift = FactoryLogs.get_service('freezer')
  File "/home/iob/Devel/elastic_tests/elasticFactory.py", line 12, in get_service
    return Factory.create_factory(service)
  File "/home/iob/Devel/elastic_tests/factory.py", line 11, in create_factory
    return FreezerLogs()
  File "/home/iob/Devel/elastic_tests/elasticFactory.py", line 68, in __init__
    super(FreezerLogs, self).__init__()
TypeError: must be type, not classobj

然后,我创建了一个类型为B的实例,并调用了bar。我觉得这里有很多地方出了问题,我需要一些东西来启发我,因为在网上阅读文档和其他资源时,我感到更加困惑

您得到的错误表明您可能正试图将
super
用于旧式类。不幸的是,这不起作用,必须通过切换到新样式的类或在不使用
super
的情况下调用超类来修复

如果您控制基类,请确保它们继承自
对象
。否则,不要使用
super
,而是直接调用基类构造函数:

class B(A):
    def __init__(self):
        A.__init__(self)
        # ...

您正在调用一个类a不存在的函数(bar)。它只存在于类B,因此您只能在那里调用它。为什么不使用super()。\uuu init\uuu()?据我所知,这并没有什么问题。@Nallath OP报告的错误表明使用了旧式类,
super
@Nallath super()。\uuuu init\uuuu。我认为它适用于python3,但不适用于python2。7@user4815162342非常感谢你。这似乎解决了一个问题,但现在我又遇到了另一个问题。它返回NameError:未定义全局名称“args”。你能解释一下吗?@b10n1k如果看不到确切的代码,很难判断。根据您显示的内容,
A._foo
使用
args
kwargs
而不进行设置(或在任何地方接收)。我不确定目的是什么,但这个其他问题可能需要一个单独的问题。
class B(A):
    def __init__(self):
        A.__init__(self)
        # ...