python - Python Attrs 在设置属性时触发转换器
问题描述
在使用 python-attrs 时,在设置属性时触发转换器的好方法是什么。
前任:
@attr.s
class A(object):
b = attr.ib(converter=str)
>>> A(b=1)
A(b='1')
>>> a = A(b=1)
>>> a.b
'1'
>>> a.b = 2
>>> a.b
2 # converter not used
解决方案
在您的情况下,您不能使用 attrs 来做到这一点,参考哲学: attrs 运行时影响非常接近于零,因为所有工作都是在定义类时完成的。一旦你初始化了它, attrs 就完全不在了。
要查看 attrs real 的作用:
import attr
import inspect
@attr.s
class A(object):
b = attr.ib(converter=str)
print(inspect.getsource(A.__init__))
输出是
def __init__(self, b):
self.b = __attr_converter_b(b)
所以你可以看到所有的魔法都是在init函数中完成的,所以实例初始化后,attrs就无法处理了,如果你真的想控制自己的设置行为,为什么不使用为类设计的描述符属性。
推荐阅读
- matplotlib - Seaborn relplots 创建重复的轴
- objective-c - NavBar 在其底部显示空白,而我使用 Objective C 在 IOS 中将 SeachView 添加为 titleView
- makefile - makefile 对多个源的一次编译调用,其中排除了标头
- java - 在 GridLayout 中看不到按钮
- sass - 将 mixin @each 循环中的变量传递到 @content
- python - 计算一维数组和二维数组中所有行之间余弦相似度的有效方法
- javascript - 发送路径,而不是文件到本地服务器
- batch-file - 需要批处理脚本将 PDF 与 PDFTK 合并并根据文件名放置第一页
- java - Hibernate - 没有名为 * 的 EntityManager 的 presistence 提供程序
- asp.net - 在 asp 之后执行 javascript 代码:按钮 onClick 处理程序?