gpt4 book ai didi

python - 在派生类中传递 *args/**kwargs

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:52 24 4
gpt4 key购买 nike

我需要了解以下行为

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

当我尝试创建派生类的实例并调用其基类中定义的方法时会引发此问题。

class A:
def __init__(self):
self.att1='a'

def _foo(self):
self.bar(*args, **kwargs)

class B(A):
def __init__(self):
super(B,self).__init__()

def bar(self, *args, **kwargs):
#code

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

最佳答案

您收到的错误表明您可能正在尝试将 super 与旧式类一起使用。不幸的是,这不起作用,必须通过切换到新式类或在不使用 super 的情况下调用父类(super class)来解决。

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

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

关于python - 在派生类中传递 *args/**kwargs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34268290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com