2016-09-10 118 views
0

从我到目前为止学到的知识来看,元类和继承自Python中的超类有着非常相似的目的,但超类的继承功能更强大。为什么我更喜欢元类继承Python中的超类的继承

为什么我会比超类继承偏好元类?在什么样的情况下元类会有帮助?

对不起,如果有任何错误的假设。我今天才学习元类。

+3

“元类和继承自Python的超类有着非常相似的目的” - 什么?不,你从哪里得到这个想法?元类具有非常不同的作用。 – user2357112

+0

对于我来说,至少它和刚学习元类的人看起来非常相似。我可以知道这些差异吗? –

回答

1

我想你已经误解了。继承是经典的面向对象技术,通过将常用的东西放在基类中并从中派生出来,从而重用代码。

Metaclasses简而言之)允许您自定义类的创建过程(特别是__new__方法),以便您可以动态添加属性和类似的东西。这有点复杂,在大多数情况下,你不会需要这个。这个答案有一些详细信息What is a metaclass in Python?

+0

为什么我想要自定义创建过程? –

+1

“元类...允许您自定义创建类的过程” - 它们让您自定义的不仅仅是创建过程。 [你想要一个'Color'类,其中Color ['red']'工作并且做了一些有意义的事情](https://docs.python.org/3/library/enum.html)Metaclasses可以让你做到这一点。 [当且仅当'thing'是可迭代的时,你想要一个'Iterable'类,其中'isinstance(thing,Iterable)'为真(https://docs.python.org/3/library/collections.abc.html )Metaclasses让你做到这一点。 – user2357112

+0

也许为了确保您只返回一个预先创建的类集(例如线程池)或者可能(如在ORM中),您可以创建一个包含db列属性的类(例如日期,名称等等),你会自动得到像“filter_by_date”,“filter_by_name”等方法 –