Python - 匿名类和对象



Python 的内置 type() 函数返回一个对象所属的类。在 Python 中,类(无论是内置类还是用户定义类)都是 class 类型的对象。

示例

class myclass:
   def __init__(self):
      self.myvar=10
      return
      
obj = myclass()

print ('class of int', type(int))
print ('class of list', type(list))
print ('class of dict', type(dict))
print ('class of myclass', type(myclass))
print ('class of obj', type(obj))

它将产生以下 输出

class of int <class 'type'>
class of list <class 'type'>
class of dict <class 'type'>
class of myclass <class 'type'>

type() 有一个三个参数的版本,如下所示:

语法

newclass=type(name, bases, dict)

使用上面的语法,可以动态创建类。三个函数类型的参数是:

  • name − 类的名称,它成为新类的 __name__ 属性

  • bases − 包含父类的元组。如果不是派生类,可以为空

  • dict − 形成新类命名空间的字典,包含属性、方法及其值。

创建匿名类

我们可以使用上述版本的 type() 函数创建一个匿名类。name 参数是一个空 字符串,第二个参数是一个 元组,其中包含一个类对象类(请注意,Python 中的每个类都继承自 object 类)。我们将某些实例变量作为第三个参数 字典 添加。目前我们保持为空。

anon=type('', (object, ), {})

创建匿名对象

要创建此匿名类的对象:

obj = anon()
print ("type of obj:", type(obj))

结果显示该对象属于匿名类。

type of 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
广告