元类
储备知识exec
参数1:字符串形式的命令
参数2:全局作用域(字典形式),如果不指定,默认使用globals()
参数3:局部作用域(字典形式),如果不指定,默认使用locals()
python当中一切皆对象,对象可以怎么用?
1.都可以被引用,x = obj
2.都可以当作函数的参数传入
3.都可以当作函数的返回值
4.都可以当作容器类的元素
类也是对象,Foo = type(....)
class Foo:
pass
obj = Foo()
print(type(obj))
print(type(Foo))
<class '__main__.Foo'>
<class 'type'>
产生类的类称之为元类,默认所有用class定义的类,他们的元类是type
定义类的两种方式:
方式一:class
class Chinese:
country = 'China'
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
print('%s is talking' % self.name)
方式二:type
定义类的三要素:
1.类名
2.类的基类(继承默认object)
3.类的名称空间
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 is talking' % self.name)
"""
class_dict = {}
exec(class_body,globals(),class_dict)
print(class_dict)
Chinese = type(class_name,class_bases,class_dict)
obj1 = Chinese('wyq', 18)
print(obj1.name, obj1.age)
print(type(Chinese))