• 元类介绍


    #储备知识 exec
    #参数1:字符串形式的命令
    #参数2:全局变量 (字典形式) 如果 不指定就使用globals
    #参数3:局部变量 (字典形式) 如果不指定就使用locals

    g = {
    'x':1,
    'm':2
    }
    l = {}
    exec('''
    global x,m
    x =10
    m = 20

    z = 3

    ''', g, l)
    print(l) #上面的’z‘没有指全局就直接归属到局部变量中
    print(g) #因为exec里面声明了'x, m为全局, 故归属到全局变量


    #在python中一切皆对象,对象可以怎么用
    #都可以被引用 obj = class, 函数 = func()
    #都可以当做函数的参数
    #都可以当做参数的返回值
    #都可以当做容器类型的元素 如 :列表, 字典, 集合, 元祖


    class Foo: #类也是对象
    pass
    obj = Foo()
    print(type(obj))
    print(type(Foo)) #Foo的对象是 元类‘type’

    #产生类的类称之为元类, 默认所有class定义出来的类 的元类都是type


    #定义类的两种方式:
    #方式1:class
    class Chinese: #这个chineses = type(......)就是type实例化过来的
    country = 'china'
    def __init__(self, name, age):
    self.name = name
    self.age = age
    def talk(self):
    print('%s is talk'%self.name)
    #print(Chinese)
    obj = Chinese('egon', 18)
    print(obj.name, obj.age)

    #方式2: type
    #定义类的三要素: 类名, 类的基类, 类的名称空间
    class_name = 'chinese'# 类名
    class_bases = (object,)# 类的父类 默认object
    class_body = '''
    country = 'china'
    def __init__(self, name, age):
    self.name = name
    self.age = age
    def talk(self):
    print('%s is talk'%self.name)
    '''
    class_dic = {} #类的局部名称空间

    exec(class_body, globals(), class_dic)
    print(class_dic)

    Chinese1 = type(class_name, class_bases, class_dic)
    #print(Chinese1)
    obj1 = Chinese1('egon', 25)
    print(obj1.name, obj1.age)
  • 相关阅读:
    jQuery自定义选项卡插件
    jQuery委托事件delegate()方法
    发布/订阅模式
    Node.js + Nginx WNMP 多域名 多端口 反向代理
    让Nginx支持apk、ipa文件下载
    jQuery中bind方法传参
    Http协议详解
    vuecli2.X环境搭建
    vue绑定属性、绑定class及绑定style
    vue数据渲染、条件判断及列表循环
  • 原文地址:https://www.cnblogs.com/yuexijun/p/10261084.html
Copyright © 2020-2023  润新知