Python子类向父类传参报错:API备用URL实现问题求助
解决思路与代码修正
问题根源
父类ParentClass的get_logs方法中,*是仅限关键字参数的标记,意味着fallback_url必须以关键字参数的形式传递,不能直接传位置参数。你当前在子类中直接传入CHILD_URL属于位置参数,因此触发错误。
方案一:直接传递关键字参数(最直接)
修改子类的get_logs方法,调用父类方法时显式指定fallback_url关键字:
CHILD_URL = "url that exists that we want to use" class ChildClass(ParentClass): name = "Child Application Logs" def get_logs(self, *, fallback_url=None) -> str: return super().get_logs(fallback_url=CHILD_URL)
如果子类不需要扩展参数,也可以简化方法定义:
CHILD_URL = "url that exists that we want to use" class ChildClass(ParentClass): name = "Child Application Logs" def get_logs(self, *) -> str: return super().get_logs(fallback_url=CHILD_URL)
方案二:通过类属性复用逻辑(更优雅)
如果多个子类都需要自定义备用URL,可以在父类中增加类属性,让父类自动读取子类的配置,避免重复重写get_logs:
修改父类:
DEFAULT_URL = "default url if the child doesn't provide a url" class ParentClass(GrannyClass): name = "Base Application Logs" # 子类可重写该属性,作为默认备用URL FALLBACK_URL = None def get_logs(self, *, fallback_url=None) -> str: # 优先级:传入的fallback_url > 子类定义的FALLBACK_URL use_fallback = fallback_url or self.FALLBACK_URL return some.API.call(DEFAULT_URL) or (use_fallback and some.API.call(use_fallback))
子类只需定义FALLBACK_URL即可,无需重写方法:
class ChildClass(ParentClass): name = "Child Application Logs" FALLBACK_URL = "url that exists that we want to use"
内容的提问来源于stack exchange,提问作者koonig
相关产品推荐
相关产品推荐

