Python元类新手应该如何理解,python元类新手,class Settin
Python元类新手应该如何理解,python元类新手,class Settin
class SettingMeta(object): def __new__(cls,*args,**kwargs): import pdb;pdb.set_trace() print "new" return super(SettingMeta1,cls).__new__(cls,*args,**kwargs) def __init__(self,*args): print "init"Setting = SettingMeta('Setting', (object,), {})class Bind(Setting): action = "append" def add1(self): print "123"
此时Setting 是SettingMeta的实例,为什么加载Bind的时候会调用SettingMeta.new?
不太理解。。。
元类体现在哪里?
不知道怎么搞的,Python 就是这么个逻辑。
reference/datamodel.html#determining-the-appropriate-metaclass 这节,第三点,「or」后半句:
你别的都没做,只定义了一个父类,所以 Python 就拿它的的 __class__ 当元类用。但是它不是个类啊,所以它的 __class__ 不是 type,而是你的 SettingMeta。于是 SettingMeta 就成这个 Bind 类的元类了……
具体代码见 Python/bltinmodule.c 里的 __build_class__ 内建函数的实现(链接到的地方就是你的 __new__ 被调用的地方)。
我用的是 Python 3 的代码。不过估计 Python 2 那边也是差不多的。
PS: markdown 反人类啊 :-(
编橙之家文章,
相关内容
- 请问python大神们应该如何正确更改iterm2的主题,python
- Python urllib没法正确抓取表格的内容源码哪里有问题,
- linux后台运行python脚本自动重启有什么好思路,linuxpy
- 如何实现python多线程更新修改数据项操作方法?,pytho
- Python源码在guess错误后没按照预设效果执行,pythongues
- 有哪些渗透工具是用python语言开发的?,渗透python,目前
- Python生成固定大小文件最高效方法,python生成大小,问,
- flask CSS文件'ascii' codec问题,flaskcodec,flask 版本使用0.
- JS是学习python爬虫必要了解的知识点吗,python爬虫,额
- 求指导django中one-to-many和foreign key的应用及用途,djang
评论关闭