Python attrs - super class 中的位置属性,而 sub class 中可选
Python attrs - positional attribute in super class while optional in sub class
我有2个非常相似的classes: A和B:
import attr
@attr.s
class A(object):
x = attr.ib()
y = attr.ib()
@attr.s
class B(object):
x = attr.ib()
z = attr.ib()
y = attr.ib(default=None)
如您所见,它们共享 2 个属性(x 和 y),但在 class 中,y 属性是位置属性,而在 B 中,它是可选的。
我想将这些 classes 分组到一个超级 class 中,但是如果我尝试使 class B 继承自 class A,我会收到以下错误:
SyntaxError: duplicate argument 'y' in function definition
添加了我用于引发错误的代码:
@attr.s
class A(object):
x = attr.ib()
y = attr.ib()
@attr.s
class B(A):
z = attr.ib()
y = attr.ib(default=None)
所以我的问题是:是否可以使用 attrs 模块将这些 classes 分组到一个超级 class 中?如果不是,你是否建议我像 'old fashion' 那样将它们分组(我自己实现 init 方法)?
非常感谢!
我不太清楚你期望的行为是什么?如果你想覆盖 A 的 y
,我有个好消息,因为这应该适用于昨天刚刚发布的 attrs 17.3:
>>> @attr.s
... class A(object):
... x = attr.ib()
... y = attr.ib()
...
...
... @attr.s
... class B(A):
... z = attr.ib()
... y = attr.ib(default=None)
>>> B(1, 2)
B(x=1, z=2, y=None)
我有2个非常相似的classes: A和B:
import attr
@attr.s
class A(object):
x = attr.ib()
y = attr.ib()
@attr.s
class B(object):
x = attr.ib()
z = attr.ib()
y = attr.ib(default=None)
如您所见,它们共享 2 个属性(x 和 y),但在 class 中,y 属性是位置属性,而在 B 中,它是可选的。
我想将这些 classes 分组到一个超级 class 中,但是如果我尝试使 class B 继承自 class A,我会收到以下错误:
SyntaxError: duplicate argument 'y' in function definition
添加了我用于引发错误的代码:
@attr.s
class A(object):
x = attr.ib()
y = attr.ib()
@attr.s
class B(A):
z = attr.ib()
y = attr.ib(default=None)
所以我的问题是:是否可以使用 attrs 模块将这些 classes 分组到一个超级 class 中?如果不是,你是否建议我像 'old fashion' 那样将它们分组(我自己实现 init 方法)?
非常感谢!
我不太清楚你期望的行为是什么?如果你想覆盖 A 的 y
,我有个好消息,因为这应该适用于昨天刚刚发布的 attrs 17.3:
>>> @attr.s
... class A(object):
... x = attr.ib()
... y = attr.ib()
...
...
... @attr.s
... class B(A):
... z = attr.ib()
... y = attr.ib(default=None)
>>> B(1, 2)
B(x=1, z=2, y=None)