python中的元类解读

在多数的编程语言中,类就是一组用来描述如何生成一个对象的代码段,但类也是对象。只要使用关键词class。python解释器在执行时就会创建一个对象。对于一个对象·:可做的操作:赋值给一个变量,拷贝,增加属性,作为函数参数进行传递等。

类也是对象,可以在运行时动态的创建。对于动态的创建类,可以使用type,它可以接受一个类的描述作为参数,然后返回一个类,另一方面,type还可以创建带有属性的类,可以接受一个字典来为类定义属性,也可以使用type创建带有方法的类,即为类增加方法时,可以定义一个恰当签名的函数并将其作为属性。

在python中,类也是对象,可以动态的创建类,使用关键词class时,python在幕后做的事,就是同通过元类来实现的

元类就是用来创建类的“东西”,创建类就是创建类的实例对象,元类就是用来创建这些类(对象)的,元类就是类的类

MyClass= MetaClass() #使用元类创建出一个对象,这个对象成为“类”
MyObject = Myclass() #使用“类”来创建出实例对象

Myclass = type('MyClass')

函数type实际上是一个元类,是python在背后用来创建所有类的元类。Python中的所有东西都是对象,包括整数、字符串、函数以及类,都是从type类中创建而来。因此,元类就是创建类这种对象的东西,type就是python的内建元类。用户可可以创建自己的元类。

在定义类时可添加__metaclass__属性

class Foo(object):
    __metaclass__ = something...
    ...省略...

Python中做了如下的操作:

1.Foo中有__metaclass__这个属性吗?如果有,python会通过__metaclass__创建一个名字为Foo的类(对象)

2.如果Python没有找到__metaclaa__,它会继续在object(父类)中寻找__metaclass__属性,并尝试做和前面同样的操作。

3.如果Python在任何父类中都找不到__metaclass__,它会在模块层次中去寻找__metaclass__.并尝试做同样的操作。

4.如果还是找不到__metaclass__,python就会用内置的type来创建这个类对象。

扫描二维码关注公众号,回复: 4014715 查看本文章

在__metaclass__中放置的代码可以是创建一个类的东西,可以用type或者子类化type来创建这个类。

对于元类本身而言,可以总结为三步:1拦截类的创建,2.修改类 ,3.返回修改之后的类。另外元类的掌握不需要特别深刻,使用的机会不多。

本篇总结于传智播客,若有侵权,请及时告知。

猜你喜欢

转载自blog.csdn.net/HelloMy_Future/article/details/81435243