• 元类介绍


    # 一切皆对象,满足以下几点的话就是一个对象
    # 1.都可以被引用,a=obj
    # 2.都可以当作函数的参数传入
    # 3.都可以当作函数的返回值
    # 4.都可以当作容器类的元素,l=[func,time,obj,1]

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

    # g = {
    # 'x':1,
    # 'y':2
    # }
    #
    # l = {}
    #
    # exec('''
    # global x,m
    # x=10
    # m=100
    # ''',
    # g,l)
    # print(g)
    # print(l)



    # 产生类的类称之为元类,默认所有用class定义的类,他们的元类是type

    # 定义类的两种方式:
    # 方式一:class
    class Chinese1:
    conuntr = 'China'

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

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

    obj1 = Chinese1('小江',18)
    print(obj1,obj1.name,obj1.age)

    # 方式二:type

    # 定义类的三要素:类名,父类,局部名称空间
    class_name = 'Chinese2'
    class_bases = (object,)

    class_body = '''
    conuntr = '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) # 构建名称空间

    Chinese2 = type(class_name,class_bases,class_dic) # 传入参数创建类
    obj2 = Chinese2('小江',18)
    print(obj2,obj2.name,obj2.age)
  • 相关阅读:
    JAVA_集合_作业01
    Java_Objects_hashCode
    Java成员内部类
    Java集合练习_实现购物车需求
    Java初级_单例设计模式
    HelloWorld
    vue中视频标点
    防抖节流?俩者区别?vue如何使用防抖、节流来解决点击问题?
    keep-alive
    axios和ajax的区别
  • 原文地址:https://www.cnblogs.com/jt925/p/10502894.html
Copyright © 2020-2023  润新知