Python day 9(4) 枚举和元类

栏目: Python · 发布时间: 8年前

内容简介:Python day 9(4) 枚举和元类

一:枚举

见大神链接: http://www.cnblogs.com/ucos/p/5896861.html

二:元类

动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。

1 type()

type() 函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过 type() 函数创建出 Hello 类,而无需通过 class Hello(object)... 的定义:

 1 >>> def fn(self, name='world'): # 先定义函数
 2 ...     print('Hello, %s.' % name)
 3 ...
 4 >>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class
 5 >>> h = Hello()
 6 >>> h.hello()
 7 Hello, world.
 8 >>> print(type(Hello))
 9 <class 'type'>
10 >>> print(type(h))
11 <class '__main__.Hello'>

要创建一个class对象, type() 函数依次传入3个参数:

  1. class的名称;
  2. 继承的父类集合,注意 Python 支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
  3. class的方法名称与函数绑定,这里我们把函数 fn 绑定到方法名 hello 上。

通过 type() 函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用 type() 函数创建出class。

正常情况下,我们都用 class Xxx... 来定义类,但是, type() 函数也允许我们动态创建出类来,也就是说,动态语言本身支持运行期动态创建类。

2  metaclass魔术代码

除了使用 type() 动态创建类以外,要控制类的创建行为,还可以使用metaclass,直译为元类。

当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。

但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类。

连接起来就是:先定义metaclass,就可以创建类,最后创建实例。

所以,metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出来的“实例”。

英文版链接: https://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python

廖神链接: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319106919344c4ef8b1e04c48778bb45796e0335839000


以上所述就是小编给大家介绍的《Python day 9(4) 枚举和元类》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Landing Page Optimization

Landing Page Optimization

Tim Ash / Wiley Publishing / 2008-1-29 / USD 29.99

在线阅读本书 How much money are you losing because of poor landing page design? In this comprehensive, step-by-step guide, you’ll learn all the skills necessary to dramatically improve your bottom li......一起来看看 《Landing Page Optimization》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具