zoukankan      html  css  js  c++  java
  • 元类介绍

    #储备知识 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)
  • 相关阅读:
    HDU 2444 The Accomodation of Students (判断是否是二分图,然后求最大匹配)
    HDU 1045 Fire Net (二分匹配)
    Leangoo如何颠覆传统项目管理软件?
    团队协作神器:Leangoo
    Leangoo-让工作更简单
    leangoo 轻量级项目协作和列表管理平台
    团队协作中的“贵族”leangoo
    使用leangoo实现多泳道任务看板
    项目管理工具到底应该为谁服务?
    《精益创业实战》读书笔记
  • 原文地址:https://www.cnblogs.com/yuexijun/p/10261084.html
Copyright © 2011-2022 走看看