元类的介绍

储备知识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)



原文地址:https://www.cnblogs.com/sunny666/p/9669085.html