码迷,mamicode.com
首页 > 其他好文 > 详细

元类介绍

时间:2019-01-12 22:52:43      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:color   不能   名称   产生   元素   base   obj   引用   china   

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

g = {‘x‘: 10, ‘b‘: 2}
l = {}
exec(
‘‘‘
global x, m
x = 100
m = 200
b = ‘laownag‘
‘‘‘, g, l)
print(l)
print(g)
#在python中一切皆对象
#都可以被引用 x = obj
#都可以当做函数参数传入
#都可以作为函数的返回值
#都可以当做容器类的元素
#类也是对象
class Foo: #Foo = type(对象,对象,对象) 换句话说Foo就是type(obj)产出来的对象
pass
obj = Foo()
print(type(obj))
print(type(Foo))
# 产生类的类就是元类,默认所有用class定义的类的元类是type()
# 定义类的两种方式:
# 1:用class
class Chinese: #Chinese = type()
country = ‘china‘
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
print(‘%s is talk‘%self.name)
#print(Chinese)
obj = Chinese(‘egon‘, 18)
print(obj, obj.name, obj.age)
#方式二:type
#定义类的三要素: 类名, 类的基类, 类的名称空间
class_name = ‘Chinese1‘
class_bases = (object,)
class_body = ‘‘‘
country = ‘china‘
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
print(‘%s is talk‘%self.name)
‘‘‘
class_dic = {} #建立一个空字典用来储存局部的名称空间
exec(class_body, globals(), class_dic) #把字符串的类体进行执行
#print(class_dic)
Chinese1 = type(class_name, class_bases, class_dic) #用type实例化一个对象 Chinese1
#print(Chinese1)
obj1 = Chinese1(‘laowang‘, 25) #再实例化一个obj1
print(obj1, obj1.name, obj1.age)

元类介绍

标签:color   不能   名称   产生   元素   base   obj   引用   china   

原文地址:https://www.cnblogs.com/yuexijun/p/10261084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!