[python]python元类

[python]python元类,第1张

概述这两天在看Django框架,里面的filter实现原理搞不明白,最后发现跟python的元类有关系.原文:http://stackoverflow.com/questions/100003/what-

这两天在看Django框架,里面的filter实现原理搞不明白,最后发现跟python的元类有关系.

原文:http://stackoverflow.com/questions/100003/what-is-a-Metaclass-in-python

伯乐在线译文:http://blog.jobbole.com/21351/

我就把我看完着两边(中英文)的收获简短的写一下,但是我还是强烈推荐看上面的两篇文章,

 

元类本身而言,它们其实是很简单的:

1)   拦截类的创建

2)   修改类

3)   返回修改之后的类

 

这样的作用是什么呢?

拦截类的创建,也就是不通过type()的方法,和默认参数进行创建类。这样做的好处就是可以在__init__实例之前,做你想做的事情。

也就是所谓的修改类。

我认为,修改类,不强大,强大的是:如果加入一行代码,就可以把所有想修改的类一次性修改了,那真是太cool,元类就可以做到。

所以就要解释一下:创建一个类的时候,过程是什么样的?

class Foo(object):

  pass

Foo中有__Metaclass__这个属性吗?如果是,Python会在内存中通过__Metaclass__创建()一个名字为Foo的类对象(我说的是类对象,请紧跟我的思路)。如果Python没有找到__Metaclass__,它会继续在bar(父类)中寻找__Metaclass__属性,并尝试做和前面同样的 *** 作。如果Python在任何父类中都找不到__Metaclass__,它就会在模块层次中去寻找__Metaclass__,并尝试做同样的 *** 作。如果还是找不到__Metaclass__,Python就会用内置的type来创建这个类对象。

也就是说,我只要在父类中有类的构建方法,就会影响子类。如果子类要是不像继承父类的Metaclass,那么就可以通过__Metaclass__指定类时,用的方法。(也就是定制类)

 

我看完之后,依然不敢说完全了解元类是怎么玩。只能知道为什么要有个元类,使用它的好处,以及看得懂发生了什么,现在的水平还能拿下它的节奏。

“当你不知道要不用的元类的时候,那你肯定不需要用它。”

 

 

总结

以上是内存溢出为你收集整理的[python]python元类全部内容,希望文章能够帮你解决[python]python元类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1190213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存