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
廣告