'''
元类被称为 Python 中的“深奥的巫术”。尽管你需要用到它的地方极少(除非你基于 zope 编程),可事实上它的基础理论其实令人惊讶地易懂。
一切皆对象
一切都有类型
“class”和“type”之间本质上并无不同
类也是对象
它们的类型是 type
以前,术语 type 用于内置类型,而术语 class 用于用户定义的类,但自 Pythoon 2.2 以来“class”和“type”本质上并无不同。
对于旧风格(old-style)类的类型是 types.ClassType
类的类是……
它的元类……
就像对象是类的实例一样,类是它的元类的实例。
调用元类可以创建类。
确切来说,Python 中的其它对象也是如此。
因此当你创建一个类时……
解释器会调用元类来生成它……
定义一个继承自 object 的普通类意味着调用 type 来创建它:
'''
a = 10 # a是整型对象
print(type(a)) # <class 'int'>class Person:passp = Person()
print(type(p))#
print(type(int)) # <class 'type'>
print(type(Person))#
# class Student:
# '''
# 这个是一个学生类
# '''
# type1 = '学生'
#
# def __init__(self, name):
# self.name = name
#
#
# s = Student('tom')
# print(Student.__dict__)Student = type('Student', (object,), {'type1': '学生类'})
print(type(Student))
s = Student()
print(s)print(type(object))class ListMetaclass(type):def __new__(cls, name, bases, attrs):print(name)print(bases)print(attrs)attrs['b'] = 'world'if attrs.get('test'):attrs.pop('test')return type.__new__(cls, name, bases, attrs)class MyList(object, metaclass=ListMetaclass):a = 'hello'def test(self):print('---->test')l = MyList()
print(l)
print(l.a)
# print(l.b)
l.test()'''type() ----> 用来构建所有类型的类用法:1.type(对象) ----》 返回的是对象的类型2.type(name,bases,attrs) ----> name 类名 bases: tuple保存的是所有的父类 attrs:{} 字典 类中的所有的属性 所有的类底层都是经过type构建出来的。自定义元类:class xxx(type):def __new__(cls,name,bases,attrs):do something....return type.__new__(cls,name,bases,attrs)class Student(父类,metaclass=xxx):pass元类它只做了三件事:拦截类的创建修改类返回修改之后的类'''