我想知道我是否有几个模型都包含像“meta_keywords”或“slug”这样的字段,这些字段与将要显示模型实例的网页有关,是否建议打破这些页面将元数据元素放到他们自己的类中,比如说PageMeta,让我的其他模型通过多重继承对它们进行子类化?
答案 0 :(得分:0)
一个轻微指定问题的一般建议:
Python中的非平凡多重继承需要Advanced Techniques来处理元类/元类型冲突。从ActiveState档案中查看this recipe,看看它是否与您喜欢的类似:
最简单的情况是元型 发生冲突的是以下几点。 考虑具有元类
M_A
的A类 和一个独立的B级 元类M_B
;假设我们得到C 来自A和B.问题是:什么是 C的元类?是M_A
还是M_B
?正确的答案(见书 “让元类工作” 深思熟虑的讨论)是
M_C
,其中M_C
是继承自的元类M_A
和M_B
。然而,Python并不是那么神奇,而且 它不会自动创建
M_C
。 相反,它引发了一个TypeError, 警告程序员可能的 混乱。
因此,我建议在Python中限制使用Python中的多重继承:
编辑:
这是An Introduction to Python中的Guido van Rossum:
很明显,不分青红皂白地使用 多重继承是一种维护 噩梦,因为依赖 关于要避免的约定的Python 意外名称冲突。
在这里,他再次出现在PEP 253中,它描述了融入Python的想法,但没有实现:
元类型确定各种政策 对于类型,例如什么 在调用类型时,动态类型是如何发生的(无论是否为 类型的 dict 可以在创建后修改),是什么 方法解析顺序是,如何查看实例属性 等等。
我认为从左到右的深度优先并不是最好的 解决方案,当你想从多个使用最多的时候 继承。
我认为具有多重继承,是元的类型 子类型必须是所有基类型的元类型的后代。
这不意味着你不应该使用多重继承;我只是警告你,所以有一天你不会惊讶地发现自己拍打你的额头并大声说道:“哦!” 我的一个子类型的元类型不是其所有基类型的元类型的后代!这种情况发生时你不讨厌吗?“