3

我有一个class A在外国图书馆。

class A:
    def __init__(self, a: int):
        self.a = a

我想扩展class Ba A

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"
4

1 回答 1

1

我有理由确定 MyPy attrs 插件不支持these.

由于您没有调用super,因此惯用的方法是将其定义a为 on 属性,B以便 attrs 处理它。


JFTR:如果你使用@attr.defineor @attr.s(auto_attribs=True),你可以省略attr.ib()调用。

于 2021-10-16T09:05:50.683 回答