我有2个非常类似的课程: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),但在A类中,y属性是位置,而在B中它是可选的。
我想在一个超类中对这些类进行分组,但如果我尝试从类A继承B类,我会收到以下错误:
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模块将这些类组合在一个超类中?如果不是,你会建议我把他们分组为“旧时尚”吗?相反(我自己实现init方法)?
非常感谢!
答案 0 :(得分:6)
我不清楚你期望的行为是什么?如果你想覆盖A的y
,我有好消息,因为这应该适用于昨天刚刚发布的第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)