Python基於內建函式type建立新型別
英文文件:
class type(object)
class type(name,bases,dict)
With one argument,return the type of an object. The return value is a type object and generally the same object as returned by object.__class__.
The isinstance() built-in function is recommended for testing the type of an object,because it takes subclasses into account.
With three arguments,return a new type object. This is essentially a dynamic form of the class statement. The namestring is the class name and becomes the __name__ attribute; the bases tuple itemizes the base classes and becomes the __bases__ attribute; and the dict dictionary is the namespace containing definitions for class body and is copied to a standard dictionary to become the __dict__ attribute.
返回物件的型別,或者根據傳入的引數建立一個新的型別
說明:
1. 函式只傳入一個引數時,返回引數物件的型別。 返回值是一個型別物件,通常與物件.__ class__返回的物件相同。
#定義型別A >>> class A: name = 'defined in A' #建立型別A例項a >>> a = A() #a.__class__屬性 >>> a.__class__ <class '__main__.A'> #type(a)返回a的型別 >>> type(a) <class '__main__.A'> #測試型別 >>> type(a) == A True
2. 雖然可以通過type函式來檢測一個物件是否是某個型別的例項,但是更推薦使用isinstance函式,因為isinstance函式考慮了父類子類間繼承關係。
#定義型別B,繼承A >>> class B(A): age = 2 #建立型別B的例項b >>> b = B() #使用type函式測試b是否是型別A,返回False >>> type(b) == A False #使用isinstance函式測試b是否型別A,返回True >>> isinstance(b,A) True
3. 函式另一種使用方式是傳入3個引數,函式將使用3個引數來建立一個新的型別。其中第一個引數name將用作新的型別的類名稱,即型別的__name__屬性;第二個引數是一個元組型別,其元素的型別均為類型別,將用作新建立型別的基類,即型別的__bases__屬性;第三個引數dict是一個字典,包含了新建立類的主體定義,即其值將複製到型別的__dict__屬性中。
#定義型別A,含有屬性InfoA >>> class A(object): InfoA = 'some thing defined in A' #定義型別B,含有屬性InfoB >>> class B(object): InfoB = 'some thing defined in B' #定義型別C,含有屬性InfoC >>> class C(A,B): InfoC = 'some thing defined in C' #使用type函式建立型別D,含有屬性InfoD >>> D = type('D',(A,B),dict(InfoD='some thing defined in D')) #C、D的型別 >>> C <class '__main__.C'> >>> D <class '__main__.D'> #分別建立型別C、型別D的例項 >>> c = C() >>> d = D() #分別輸出例項c、例項b的屬性 >>> (c.InfoA,c.InfoB,c.InfoC) ('some thing defined in A','some thing defined in B','some thing defined in C') >>> (d.InfoA,d.InfoB,d.InfoD) ('some thing defined in A','some thing defined in D')
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。