Python类中的元数据

5
我发现在一些Python库中有一个通用的模式,即在对象内部使用名为Meta的类定义,例如Django Models或Tastypie Resources。还有一些不使用此类似的Celery Tasks。

这样做是否有明显的原因?从tastypie代码中可以看出,某些元类正在处理内部Meta类定义。

模型的元数据和普通属性之间有什么区别?在Django模型中很容易说:属性只是像age = IntegerField这样的字段,但我可以想到称为fields的属性,或者只使用_attrs或__attrs作为元数据。

这被认为是一种良好的实践吗?

再补充一下:

是否有更多的库以类似的方式接近此问题?还是有不同的方法来做相同的事情?在这里是否有任何常见模式我可以检查?谢谢。

我想要开始一个库,我喜欢两种方式,与这两个库没有太多关联,选择其中之一并没有一致性问题。
1个回答

6
不,除了约定俗成的惯例外,没有其他区别:TastyPie仅使用与Django模型相同的约定来将“数据”与“元数据”(有关数据的数据)分开。
元类和Meta类
此外,元类可以访问类属性和内部类,因此这并不起任何重要作用。
为什么不使用_attrs或__attrs?
您可以将其命名为_attrs(可能不是__attrs,因为名称混淆机制),但约定不同(前导下划线表示API不是公共的)。
为什么在TastyPie中使用Meta?
至于TastyPie和Meta内部类用于存储选项的原因,我建议观看Daniel Lindsley(TastyPie的创建者)的演示文稿,名为“ API设计提示”,该演示文稿在最新的DjangoCon US 2012期间举行:http://www.youtube.com/watch?v=IKQzXu43hzY - 这清楚地显示了使用此特定方法构建TastyPie API的原因。
一点关于一致性
当涉及到“这是否被认为是一种良好的实践?”部分时,我会引用PEP8的一部分(“样式指南”,特别是一致性部分):
引用:
样式指南是关于一致性的。与这个样式指南保持一致很重要。项目内的一致性更重要。一个模块或函数内的一致性最重要。
因此,我将这种方法(TastyPie中的方法)视为与开发它的框架(即Django)的一致性的标志。
关于良好实践的话
是的,这是一种良好的实践(保持一致)。使用Python Style Guide(PEP8)的命名约定也是一种良好的实践,因为它被广泛采用。但是,在TastyPie中使用Meta内部类只是一种约定-如果您正在编写某些扩展程序以用于Celery Tasks,则最好坚持其命名约定以不使用户感到困惑。

谢谢,我明白了一致性的重要性,这很有道理。我想稍微改变一下我的问题,是否有更多的库以类似的方式处理?或者有不同的方法来做同样的事情吗?这里是否有任何常见的模式可以检查?谢谢。我想开始一个库,我喜欢这两种方式,与这两个库没有太大关系,因此选择其中一个或另一个并没有一致性问题。 - Jorge E. Cardona

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接