python类中的元数据

时间:2012-11-07 02:51:38

标签: python metadata

我在一些python库中看到了在对象中使用名为Meta的类定义的常见模式,如django Models或tastypie Resources。还有一些人不像Celery Tasks那样使用它。

有没有明显的原因?来自tastypie代码我可以看到一些元类正在使用内部的Meta类定义。 元数据和模型的简单属性有什么不同吗?在django模型中有点容易说:属性只是像age = IntegerField这样的字段,但我可以在属性中调用字段,或者只使用_attrs或__attrs作为元数据。

这是一个好习惯吗?

再见。

编辑:

我想补充一点:

还有更多的图书馆以类似的方式接近这个吗?或者有不同的方法来做同样的事情?这里有什么常见的模式我可以检查吗?谢谢。

我想创建一个库,我喜欢这两种方式,与这两个库没有多大关系,所以选择其中一个没有一致性问题

再见。

1 个答案:

答案 0 :(得分:5)

不,除了惯例之外没有别的区别:TastyPie只使用Django模型用于将“数据”与“元数据”(数据数据)分开的相同约定。

元类和Meta

此外,元类可以访问类属性和内部类,因此这不起任何重要作用。

为什么不_attrs__attrs

您可以将其命名为_attrs(由于名称修改机制可能不是__attrs),但约定不同(前导下划线表示API不公开)。

为什么在TastyPie中有Meta

至于TastyPie和Meta内部类存储选项的原因,我建议观看名为“ API设计技巧的Daniel Lindsley(TastyPie的创建者)的演示文稿“,这是在最近的DjangoCon US 2012期间发生的:http://www.youtube.com/watch?v=IKQzXu43hzY - 它清楚地显示了使用这种特定方法构建TastyPie API的原因。

关于一致性

当谈到“这被认为是一种好习惯吗?”部分时,我会引用PEP8的一部分(“风格指南”,特别是part about consistency):

  

风格指南是关于一致性的。与此风格指南的一致性非常重要。项目的一致性更为重要。一个模块或功能的一致性是最重要的。

所以我会将这种方法(TastyPie中的方法)视为与其开发框架(即:Django)保持一致的标志。

关于良好做法的一句话

是的,是一种很好的做法(要保持一致)。使用Python样式指南(PEP8)中的命名约定也是一种很好的做法,因为它被广泛采用。但是,使用Meta内部类只是一种惯例 - 如果您正在为Celery Tasks编写一些扩展,最好坚持其命名约定,以免混淆用户。