元类被称为 Python 中的“深奥的巫术“

网友投稿 566 2022-11-21

元类被称为 Python 中的“深奥的巫术“

元类被称为 Python 中的“深奥的巫术“

''' 元类被称为 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 Person: passp = Person()print(type(p))#print(type(int)) # 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 元类它只做了三件事: 拦截类的创建 修改类 返回修改之后的类 '''

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Scala 包的声明和使用
下一篇:【python】urllib和urllib3,requests 简要概括---笔记
相关文章

 发表评论

暂时没有评论,来抢沙发吧~