所有类的类型都是type,所有类都是通过type创建出来的,我们看一下下面的代码:
#Python2中的方式成为旧式类 ,instance
class MyClass:
pass
#Python3中两种定义方式没有任何区别都是object
#python3中的这个方式成为新式类,type
class MyClass1(object):
pass
c= MyClass()
c1= MyClass1()
print(type(c))
print(type(c1))
print(type(MyClass))
print(type(MyClass))
运行结果:
<class '__main__.MyClass'>
<class '__main__.MyClass1'>
<class 'type'>
<class 'type'>
元类:
Python中任何新式类和Python3中的任何类都是type元类的一个实例,函数type实际上是一个元类,type就是Python在背后用来创建所有类的元类;
注意区分元类和继承的基类:
- type:是元类,所有类都是通过type创建出来的
- object:顶层基类,所有类的继承顶层父类都是object
使用type动态定义类:
内置type()函数在传递一个参数时返回一个对象类型,对于新式类,通常与对象的class属性相同;
type(name,bases,dict)
- name:指定类名称
- bases:指定继承类的父类元组,tuple类型
- dict:定义类的属性和方法,dict类型,添加的属性和类属性
def func1(self):
print('这个是self.name:',self.name)
dict1 = {'name':'小静','age':18,'func':func1}
My = type('MyClass',(object,),dict1)
m1 = My() 使用返回的变量名进行创建对象
print(m1.name)
print(m1.age)
m1.func() #注意使用type中方法属性的key值进行调用
运行结果:
小静
18
这个是self.name: 小静