儲備知識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)