173得票10回答
如何避免在__init__中使用"self.x = x; self.y = y; self.z = z"模式?

我看到类似的模式def __init__(self, x, y, z): ... self.x = x self.y = y self.z = z ... 经常出现这种情况,通常还带有更多的参数。有没有好的方法来避免这种繁琐的重复?应该让类继承自name...

35得票4回答
在__init__中为用户类设置默认/空属性

我有一定的编程水平,从社区中受益良多。然而我没有接受过太多编程学术教育,也没有与经验丰富的程序员共事。因此,我有时会遇到“最佳实践”的问题。 问题: 当我创建一个新类时,应该在__init__中设置所有实例属性吗,即使它们是None并且实际上稍后在类方法中分配值? 请参见下面的示例,其中MyC...

22得票1回答
什么时候以及为什么应该使用 attr.Factory?

什么情况下我应该使用 attr.ib(default=attr.Factory(list)) 而不是 attr.ib(default=[])? 从文档中,我看到 Factory 用于生成新的值,如果你正在使用带有输入的 lambda 表达式,那么这很有意义;但是,如果你只是生成一个空列表,我...

15得票2回答
完美转发 - 在Python中

我是一个Python项目的维护者,这个项目大量使用继承。其中有一个反模式导致了我们遇到了一些问题,并且使得代码难以阅读。我正在寻找一种好的方法来修复它。 问题是从派生类向基类转发非常长的参数列表-通常但并不总是在构造函数中。 考虑这个人工的例子:class Base(object): ...

14得票3回答
如何使用Python模块'attrs'实现"attr.asdict(MyObject)"的反向操作?

在Python模块attrs的文档中指出了一种将属性类转换为字典表示的方法: 示例: >>> @attr.s ... class Coordinates(object): ... x = attr.ib() ... y = attr.ib() ... &g...

10得票4回答
如何在asdict中获取@property方法?

我有一些类似于:from attr import attrs, attrib @attrs class Foo(): max_count = attrib() @property def get_max_plus_one(self): return ...

9得票1回答
如何指定一个属性必须是整数列表,而不仅仅是列表?

使用attrs库和Python 3.6,我认为以下内容可以让我指定x和y只能包含整数: import attr @attr.s class C: x : List[int] = attr.ib() # not working y = attr.ib(type=List[int]...

8得票1回答
使用attrs将JSON转换为Python类

我想知道是否可以使用attrs库将嵌套的JSON转换为Python类实例,以便我可以通过点符号(object.attribute.nested_attribute)访问该JSON中的属性。 我的JSON具有固定的模式,我可以手动定义该模式的类,但我不确定是否可以在不必逐个实例化每个嵌套对象的...

7得票1回答
使用attrs在Pycharm中为子类添加类型提示

Pycharm抱怨MyClass实例的意外参数。有没有解决方法? import attr @attr.s class _Super: """ My Super class""" x: str = attr.ib(validator=attr.validators.insta...

7得票1回答
如何将字符串表示形式的枚举反序列化?

我想创建一个类,该类具有枚举作为属性。这个枚举应该有一个字符串表示形式,当将使用枚举属性的类的实例转储为JSON字符串时,它会显示为人类可读的值。 在下面的最小工作示例中,我以三种不同的方式创建了三个枚举。 在反序列化之后,每个属性都表明它来自一个枚举,除了具有字符串表示的枚举。它只是一个...