元类介绍

# 一切皆对象,满足以下几点的话就是一个对象
# 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)
原文地址:https://www.cnblogs.com/jt925/p/10502894.html