Python 的内置 type()
函数返回一个对象所属的类。在 Python 中,一个类,无论是内置类还是用户定义的类,都是 type
类型的对象。
示例
class myclass:
def __init__(self):
self.myvar=10
return
obj = myclass()
print('int 类型:', type(int))
print('list 类型:', type(list))
print('dict 类型:', type(dict))
print('myclass 类型:', type(myclass))
print('obj 类型:', type(obj))
它将产生以下输出:
int 类型: <class 'type'>
list 类型: <class 'type'>
dict 类型: <class 'type'>
myclass 类型: <class 'type'>
type()
还有一个三参数版本如下:
语法
newclass = type(name, bases, dict)
使用上述语法,可以动态创建一个类。type
函数的三个参数分别为:
-
name
- 类的名称,这将成为新类的 __name__
属性。
-
bases
- 包含父类的元组。如果不是派生类,则可以为空。
-
dict
- 形成新类命名空间的字典,包含属性和方法及其值。
创建一个匿名类
我们可以使用上述版本的 type()
函数来创建一个匿名类。name
参数是一个空字符串,第二个参数是一个包含一个类(即 object
类)的元组(请注意,Python 中的每个类都继承自 object
类)。我们将某些实例变量作为第三个参数字典添加。现在我们保持它为空。
anon = type('', (object, ), {})
创建一个匿名对象
要创建这个匿名类的对象:
obj = anon()
print("obj 的类型:", type(obj))
结果表明该对象属于匿名类:
obj 的类型: <class '__main__.'>
匿名类和对象示例
我们还可以动态地添加实例变量和实例方法。请看下面的例子:
def getA(self):
return self.a
obj = type('',(object,),{'a':5,'b':6,'c':7,'getA':getA,'getB':lambda self : self.b})()
print(obj.getA(), obj.getB())
它将产生以下输出:
5 6