我在国外的图书馆里有一本class A。
class A:
def __init__(self, a: int):
self.a = a我想用A扩展一个class B,如下所示:
import attr
@attr.s
class B(A):
b: int = attr.ib()代码似乎可以工作:
import attr
class A:
def __init__(self, a: int):
self.a = a
attr.s(these={
"a": attr.ib(type=str)
}, init=True)(A)
@attr.s(kw_only=True)
class B(A):
b: int = attr.ib()
if __name__ == "__main__":
a = A(1)
b = B(a=1, b=2)
print(a) # output: A(a=1)
print(b) # output: B(a=1, b=2)但是mypy/pyright并不开心。
> mypy file.py
error: Unexpected keyword argument "a" for "B"发布于 2021-10-16 09:05:51
我相当确定MyPy attrs插件不支持these。
由于您没有调用super,最常用的方法是将a定义为B上的一个属性,这样attrs就可以处理它了。
JFTR:如果您使用@attr.define或@attr.s(auto_attribs=True),则可以省略attr.ib()调用。
https://stackoverflow.com/questions/69593824
复制相似问题