1. 程式人生 > >Python中type的用法

Python中type的用法

目錄

描述

python的 type 函式有兩個用法,當只有一個引數的時候,返回物件的型別。當有三個引數的時候返回一個類物件。

語法

type(object)

type(name, bases, dict)

用法

一個引數

type(object)

返回一個物件的型別,如:

In [1]: a = 10 
               
In [2]: type(a)
Out[2]: int    

三個引數

tpye(name, bases, dict)

  • name 類名
  • bases 父類的元組
  • dict 類的屬性方法和值組成的鍵值對

返回一個類物件:

# 例項方法
def instancetest(self):
    print("this is a instance method")


# 類方法
@classmethod
def classtest(cls):
    print("this is a class method")


# 靜態方法
@staticmethod
def statictest():
    print("this is a static method")


# 建立類
test_property = {"name": "tom", "instancetest": instancetest, "classtest": classtest, "statictest": statictest}
Test = type("Test", (), test_property)


# 建立物件
test = Test()
# 呼叫方法
print(test.name)
test.instancetest()
test.classtest()
test.statictest()

執行結果:

tom
this is a instance method
this is a class method
this is a static method

使用help列印Test的詳細資訊:

class Test(builtins.object)                                               
 |  Methods defined here:                                                 
 |                                                                        
 |  instancetest(self)                                                    
 |      # 例項方法                                                            
 |                                                                        
 |  ----------------------------------------------------------------------
 |  Class methods defined here:                                           
 |                                                                        
 |  classtest() from builtins.type                                        
 |      # 類方法                                                             
 |                                                                        
 |  ----------------------------------------------------------------------
 |  Static methods defined here:                                          
 |                                                                        
 |  statictest()                                                          
 |      # 靜態方法                                                            
 |                                                                        
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:                                        
 |                                                                        
 |  __dict__                                                              
 |      dictionary for instance variables (if defined)                    
 |                                                                        
 |  __weakref__                                                           
 |      list of weak references to the object (if defined)                
 |                                                                        
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:                               
 |                                                                        
 |  name = 'tom'                                        

可以看出我們建立了一個Test類,包含一個例項方法statictest,類方法classtest,靜態方法statictest,和一個屬性name = 'tom'。

type和isinstance

type不會認為子類是父類的型別,不會考慮繼承關係。isinstance會任務子類是父類的型別,考慮繼承關係。

Type和Object

type為物件的頂點,所有物件都建立自type。

object為類繼承的頂點,所有類都繼承自object。

python中萬物皆物件,一個python物件可能擁有兩個屬性,__class____base____class__ 表示這個物件是誰建立的,__base__ 表示一個類的父類是誰。

In [1]: object.__class__
Out[1]: type

In [2]: type.__base__
Out[2]: object

可以得出結論:

  • type類繼承自object
  • object的物件建立自type