Python中的元类是什么
这篇文章主要讲解了"Python中的元类是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中的元类是什么"吧!
xiaoming
, xiaohong
, xiaozhang
都是学生,这类群体叫做 Student
.
Python 定义类的常见方法,使用关键字 class
In [36]: class Student(object):
...: pass
xiaoming
, xiaohong
, xiaozhang
是类的实例,则:
xiaoming = Student()
xiaohong = Student()
xiaozhang = Student()
创建后,xiaoming 的 __class__
属性,返回的便是 Student
类
In [38]: xiaoming.__class__
Out[38]: __main__.Student
问题在于,Student
类有 __class__
属性,如果有,返回的又是什么?
In [39]: xiaoming.__class__.__class__
Out[39]: type
哇,程序没报错,返回 type
那么,我们不妨猜测:Student
类,类型就是 type
换句话说,Student
类就是一个对象,它的类型就是 type
所以,Python 中一切皆对象,类也是对象
Python 中,将描述 Student
类的类被称为:元类。
按照此逻辑延伸,描述元类的类被称为:元元类,开玩笑了~ 描述元类的类也被称为元类。
聪明的朋友会问了,既然 Student
类可创建实例,那么 type
类可创建实例吗?如果能,它创建的实例就叫:类 了。你们真聪明!
说对了,type
类一定能创建实例,比如 Student
类了。
In [40]: Student = type('Student',(),{})
In [41]: Student
Out[41]: __main__.Student
它与使用 class
关键字创建的 Student
类一模一样。
Python 的类,因为又是对象,所以和 xiaoming
,xiaohong
对象操作相似。支持:
赋值 拷贝 添加属性 作为函数参数
In [43]: StudentMirror = Student # 类直接赋值 # 类直接赋值
In [44]: Student.class_property = 'class_property' # 添加类属性
In [46]: hasattr(Student, 'class_property')
Out[46]: True
元类,确实使用不是那么多,也许先了解这些,就能应付一些场合。就连 Python 界的领袖 Tim Peters
:
"元类就是深度的魔法,99%的用户应该根本不必为此操心。"
感谢各位的阅读,以上就是"Python中的元类是什么"的内容了,经过本文的学习后,相信大家对Python中的元类是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!