Python 属性:从 class 继承哪些值具有默认值会引发错误
Python attrs: Inheriting from class which values have default values raises error
我有这样一种情况,属性 class 继承自另一个 class 属性具有默认值。这会引发 ValueError。
这是一个例子:
from attrs import define
@define
class A:
a: int = 1
@define
class B(A):
b: int
test = B(b=1)
>>> ValueError: No mandatory attributes allowed after an attribute with a default value or factory. Attribute in question: Attribute(name='b', ...
如何避免这种行为?
您 运行 达到了 Python 的限制。您要求 attrs 为您编写的 __init__
看起来像这样:
def __init__(self, b=1, a):
self.b = b
self.a = a
不可能存在。
您可以通过声明 class B 或属性 b keyword-only:
来解决这个问题
from attrs import define, field
@define
class A:
a: int = 1
@define(kw_only=True)
class B1(A):
b: int
@define
class B2(A):
b: int = field(kw_only=True)
test1 = B1(b=1)
test2 = B2(b=1)
我有这样一种情况,属性 class 继承自另一个 class 属性具有默认值。这会引发 ValueError。
这是一个例子:
from attrs import define
@define
class A:
a: int = 1
@define
class B(A):
b: int
test = B(b=1)
>>> ValueError: No mandatory attributes allowed after an attribute with a default value or factory. Attribute in question: Attribute(name='b', ...
如何避免这种行为?
您 运行 达到了 Python 的限制。您要求 attrs 为您编写的 __init__
看起来像这样:
def __init__(self, b=1, a):
self.b = b
self.a = a
不可能存在。
您可以通过声明 class B 或属性 b keyword-only:
来解决这个问题from attrs import define, field
@define
class A:
a: int = 1
@define(kw_only=True)
class B1(A):
b: int
@define
class B2(A):
b: int = field(kw_only=True)
test1 = B1(b=1)
test2 = B2(b=1)