3.1.14 元类的介绍
Posted beallaliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.1.14 元类的介绍相关的知识,希望对你有一定的参考价值。
#储备知识exec
#参数1:字符串形式的命令
#参数2:全局作用域(字典形式),如果不指定默认就使用globals()
#参数3:局部作用域(字典形式),如果不指定默认就使用locals()
g={ ‘x‘:1, ‘y‘:2 } l={}
#exec功能,把里面的第一个参数的字符转成代码执行,以global声明的变量存到g的字典变量(全局变量)里,其余的存在l的字典变量(局部变量里)。 exec(""" global x,m x=10 m=100 z=3 """,g,l) print(g) print(l)
#一切皆对象,对象可以怎么用?
#1、都可以被引用,x=obj
#2、都可以当作函数的参数传入
#3、都可以当作函数的返回值
#4、都可以当作容器类的元素,l=[func,time,obj,1]
#类也是对象,Foo=type(....)
class Foo: pass obj=Foo() print(type(obj)) # 元类:Foo print(type(Foo)) # 元类:type class Bar: pass print(type(Bar)) # 元类: type
#产生类的类称之为元类,默认所以用class定义的类,他们的元类是type
#定义类的两种方式:
#方式一:class
class Chinese: #Chinese=type(...) country=‘China‘ def __init__(self,namem,age): self.name=namem self.age=age def talk(self): print(‘%s is talking‘ %self.name) # print(Chinese) obj=Chinese(‘egon‘,18) print(obj,obj.name,obj.age)
#方式二:type
#定义类的三要素:类名,类的基类们,类的名称空间
class_name=‘Chinese‘ class_bases=(object,) class_body=""" country=‘China‘ def __init__(self,namem,age): self.name=namem self.age=age def talk(self): print(‘%s is talking‘ %self.name) """ class_dic={} #存放exec执行的第一参数存放的局部变量 exec(class_body,globals(),class_dic) # print(class_dic) Chinese1=type(class_name,class_bases,class_dic) #调用type的参数:类名,基类(元类,父类),空间名称 # print(Chinese1) obj1=Chinese1(‘egon‘,18) print(obj1,obj1.name,obj1.age) #通过type生成出来的类对象 跟 class是一样的
以上是关于3.1.14 元类的介绍的主要内容,如果未能解决你的问题,请参考以下文章