• 元类的介绍


    储备知识exec
    exec(object,globals,locals)

    参数1:字符串形式的命令
    参数2:全局作用域(字典形式),如果不指定默认使用globals()
    参数3:全局作用域(字典形式)。如果不指定默认使用locals().

    g={
    'x':1,
    'y':2
    }
    l={}


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

    z=3
    ''',g,l)
    global x,m定义了一个全局变量
    z=3 exec 将z=3定义到局部变量
    print(g)
    print(l)

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



    #类也是对象
    # 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
    # class Chinese:
    # country='China'
    #
    # def __init__(self,name,age):
    # self.name=name
    # self.age=age
    #
    # def talk(self):
    # print('%s in talking' %self.name)
    #

    #方式二:type
    #定义类的三要素
    class_name='Chinese' #类名
    class_bases=(object,) #类的父类

    class_body='''
    country='China'

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

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

    '''

    class_dic={}
    exec(class_body,globals(),class_dic)#改作用域传到class_dic
    print(class_dic)

    Chinese1=type(class_name,class_bases,class_dic)
    obj1=Chinese1('EGON',18)
    print(obj1,obj1.name,obj1.age)



  • 相关阅读:
    icmp隧道手工操作
    Volatility2.4以上版本及fmem使用指南
    服务器解析漏洞总结
    Docker搭建独立服务器
    shell--(二)变量、字符串、数组、注释
    shell--(一)运行示例
    mysql 批量更新,没有就插入
    go 系统监控 cpu、内存等指标
    监控
    maven安装配置 每次都百度,麻烦
  • 原文地址:https://www.cnblogs.com/sunny666/p/9669085.html
Copyright © 2020-2023  润新知