python学习笔记——元类
什么是元类?
可以实例化产生类的类称为元类。
即 元类 --实例化–> 类 --实例化–> 对象
python中默认的元类为type,用class关键字定义的类,以及内置的类,如list、str等,都是由type元类实例化得到的。
class Dog:
def __init__(self, name, color):
self.name = name
self.color = color
def info(self):
print('name: {}, color: {}'.format(self.name, self.color))
print(type(Dog)) # <class 'type'>
print(type(list)) # <class 'type'>
如何使用元类type定义一个类
定义class_name
class_name = 'Dog'
定义基类,即继承于哪个父类,默认为object
class_bases = (object,)
获取子代码的名称空间
# 定义执行子代码
class_body = """
def __init__(self, name, color):
self.name = name
self.color = color
def info(self):
print('name: {}, color: {}'.format(self.name, self.color))
"""
# 定义一个字典来存储子代码执行产生的名称空间
class_dict = {}
# 获取名称空间
exec(class_body, {}, class_dict) # 三个参数分别是:类子代码,全局名称空间,局部名称空间,如果类子代码引用了全局名称空间的名字,需要通过全局名称空间传进去
print(class_dict)
# {'__init__': <function __init__ at 0x000002090001CDC0>, 'info': <function info at 0x00000209189AF640>}
使用type实例化类
Dog = type(class_name, class_bases, class_dict)
dog1 = Dog('Ha', 'white')
print(dog1) # <__main__.Dog object at 0x0000021567E17C40>
dog1.info() # name: Ha, color: white