gpt4 book ai didi

Python attrs - 父类(super class)中的位置属性而子类中可选

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:06 24 4
gpt4 key购买 nike

我有 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 中,它是可选的。

我想将这些类分组到一个父类(super class)中,但是如果我尝试让类 B 继承自类 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 模块将这些类分组到一个父类(super class)中?如果不是,您是否建议我像“旧时尚”方式那样将它们分组(自己实现初始化方法)?

非常感谢!

最佳答案

我不太清楚您期望的行为是什么?如果你想覆盖 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)

关于Python attrs - 父类(super class)中的位置属性而子类中可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47198647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com