zoukankan      html  css  js  c++  java
  • 元类

    元类:

    一切皆对象:类实际上是一个一个对象

    Person类也是一个对象,那他一定是由一个类实例化得到,这个类,就叫元类

    type是内置的一个元类,所有的类都是type实例化得到的类,叫元类

    class Person:
        def __init__(self,name):
            self.name=name
        def score(self):
            print('分数是100')
    # p=Person('lzs')
    a=Person
    p1=a('lzs')
    print(p1.name)
    
    
    ##如何找元类 直接用type来找元类
    print(type(p1))  ##Person
    

    自定义元类:

    自定义元类:来控制类的产生,可以控制类名,可以控制类的继承,控制类的名称空间,可以通过自定义元类,重写__init__方法来控制类的产生

    ##在元类控制自定义类无需init方法
    class Mymeta(type):
        def __call__(self, name, age):
            obj=object.__new__(self)
            obj=object.__dict__['']={'name':name,'age':age}
            return obj
    class Person(metaclass=Mymeta):
        name='lzs'
        age=20
    print(Person.__dict__)
    
    ##在元类中控制,把自定义的类的属性都放到attr字典中
    class Mymeta(type):
        def __call__(self,name,age):
            obj=object.__new__(self)
            obj.__dict__['attr']={'name':name,'age':age}
            return obj
    class Person(metaclass=Mymeta):
        def __init__(self,name,age):
            self.name=name
            self.age=age
    p=Person('lzs',18)
    print(p.__dict__)
    

    模块:

    控制类的产生

    class Mymeta(type):
        def __call__(self, name, age):
            obj = object.__new__(self)
            obj.__dict__['attr'] = {'name': name, 'age': age}
            return obj
    class Person(metaclass=Mymeta):
        def __init__(self,name,age):
            self.name=name
            self.age=age
    p=Person('lzs',18)
    print(p.__dict__)
    

    _init_和__new__的区别

    _new_创建空对象

    _init_初始化空对象

    __init__:控制类的产生,在__new__之后
    __call__:对着对象的产生
    __new__:控制类产生最根上,其实本质最根本上也不是它,是type的__call__但是我们不能控制
    
    既然选择了远方,只能风雨兼程
  • 相关阅读:
    Linux工具之man手册彩色页设置
    使用bakefile编译C工程代码
    学会使用简单的 MySQL 常用操作
    Mysql数据库的通用安装方法
    从Mysql数据库中导入导出表结构
    CentOS下安装MySQL数据库
    lua函数调用
    innodb记录延迟删除对于其它DB操作的影响
    从apache派生cgi工作路径看软链接
    两台主机互为网关是否会像打乒乓球一样一直互发
  • 原文地址:https://www.cnblogs.com/lzss/p/11511240.html
Copyright © 2011-2022 走看看