子类如何覆盖基类元类的关键字参数,使首次执行用新值
问题:替换元类执行时的初始关键字参数
当ChildClass继承BaseClass时,BaseMetaClass.__new__(...)会运行两次:第一次使用关键字参数"foo",第二次使用"bar"。能否在首次执行前就将"foo"替换为"bar"?我不介意它运行两次,但首次执行时必须使用"bar"这个值。
class BaseMetaClass(type): def __new__(cls, name, bases, attrs, *args, **kwargs): # do something with attrs here return super().__new__(cls, name, bases, attrs) class BaseClass(keywordarg="foo", metaclass=BaseMetaClass): pass class ChildClass(BaseClass, keywordarg="bar"): pass
尝试该操作的原因:
我正在研究如何覆盖/操作一个用于注册服务的装饰器。
已尝试的额外方法:
- 试过
__prepare__方法,但未得到预期结果。 - 尝试过以下写法,但属于无效语法:
class ChildClass(BaseClass(keywordarg="bar")):
内容的提问来源于stack exchange,提问作者Moritz Hartmann
相关产品推荐
相关产品推荐

