• 元类介绍


    '''
    储备知识exec
    参数1:字符串形式的命令
    参数2:全局作用域(字典形式),如果不指定默认就使用globals()
    参数3:局部作用域(字典形式),如果不指定默认就使用locals()
    '''
    g = {
    'x': 1,
    'y': 2

    }
    l = { }

    exec('''
    global x,m
    x = 10
    m = 100

    z =3
    ''',g,l)
    print(g)
    print(l) # 执行结果:{'z': 3}

    '''
    一切皆对象,对象可以怎么用?
    1、都可以被引用,x=obj
    2、都可以当作函数的参数传入
    3、都可以当作函数返回值
    4、都可以当作容器类的元素, L = [func,time,obj,l]
    '''

    # 类也是对象,Foo=type(...)
    class Foo:
    pass

    obj = Foo()
    print(type(obj)) # 执行结果:<class '__main__.Foo'>
    print(type(Foo)) # 执行结果:<class 'type'>

    class Bar:
    pass


    print(type(Bar)) # 执行结果:<class 'type'>
    # 产生类的类称之为元类, 默认所以用class定义的类,他们的元类是type
    # 定义类的两种方式:
    # 方式一:class


    class Chinese: # Chinese=type(...)
    country = 'china'

    def __init__(self,name,age):
    self.name=name
    self.age=age

    def talk(self):
    print('%s is talking'%self.name)


    print(Chinese) # 结果:<class '__main__.Chinese'>
    obj = Chinese('kingforn',18)
    print(obj.__dict__)
    '''执行结果:
    {{'name': 'kingforn', 'age': 18}
    '''

    # 方式二: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 talking'%self.name)

    ''' # 类体
    class_dict = {}
    exec(class_body,globals(),class_dict)
    ''' print(class_dict) # {'country': 'china', '__init__': <function __init__ at 0x000001C0DBB01AE8>,
    'talk': <function talk at 0x000001C0DBB01C80>}

    '''
    Chinese1= type(class_name, class_bases, class_dict)
    print(Chinese1) # 结果:<class '__main__.Chinese'>
    obj1=Chinese1('alex',38)
    print(obj1.__dict__)
    '''执行结果:
    {'name': 'alex', 'age': 38}
    '''
  • 相关阅读:
    Linux 学习
    mac 驱动
    用wubi安装ubuntu
    Eclipse安装Svn
    XML学习
    java集合类总结
    CVS学习
    [转载]java集合类总结
    Servlet学习
    JSP介绍
  • 原文地址:https://www.cnblogs.com/kingforn/p/11354051.html
Copyright © 2020-2023  润新知