Python 類 例項和其他物件的內建函式

2021-06-21 02:46:22 字數 2805 閱讀 5968

1、issubclass()

issubclass() 布林函式判斷乙個類是另乙個類的子類或子孫類。

issubclass(sub, sup)
issubclass() 返回 true 的情況:給出的子類 sub 確定是父類 sup 的乙個子類(反之,則為 false)。這個函式也允許「不嚴格」的子類,意味著,乙個類可視為其自身的子類。issubclass() 的第二個引數可以是可能的父類組成的元組(tuple),這時,只要第乙個引數是給定元組中任何乙個候選類的子類時,就會返回 true。

2、isinstance()

isinstance() 布林函式在判斷乙個物件是否是另乙個給定類的例項時,非常有用。

isinstance(obj1, class)
isinstance() 在 obj1 是類class的乙個例項,或者是class的子類的乙個例項時,返回true(反之,則為 false)。

>>> class c1:

... pass

...>>> class c2:

... pass

...>>> c1 = c1()

>>> c2 = c2()

>>> isinstance(c1, c1)

true

>>> isinstance(c2, c1)

false

>>> isinstance(c1, c2)

false

>>> isinstance(c2, c2)

true

>>> isinstance(c2, c2)

traceback (most recent call last):

file "", line 1, in typeerror: isinstance() arg 2 must be a type or tuple of types

注意:第二個引數應該是類;不然,會得到乙個typeerror。

同 issubclass() 一樣,isinstance() 也可以使用乙個元組作為第二個引數。如果第乙個引數是第二個引數中給定元組的任何乙個候選型別或類的例項時,就會返回 true。

3、hasattr()、getattr()、setattr()、delattr()

當使用這些函式時,傳入正在處理的物件作為第乙個引數,但屬性名,也就是這些函式的第二個引數,是這些屬性的字串名字。

hasattr() 的目的就是為了決定乙個物件是否有乙個特定的屬性,一般用於訪問某屬性前先做乙個檢查。getattr() 和 setattr() 函式相應地取得和賦值給物件的屬性,getattr() 會在你試圖讀取乙個不存在的屬性時,引發attributeerror異常,除非給出那個可選的預設引數。setattr() 將要麼加入乙個新的屬性,要麼取代乙個已存在的屬性。而delattr()函式會從乙個物件中刪除屬性。

>>> class myclass:

... def __init__(self):

... self.foo = 100

...>>> myinst = myclass()

>>> hasattr(myinst, 'foo')

true

>>> getattr(myinst, 'foo')

100>>> hasattr(myinst, 'bar')

false

>>> getattr(myinst, 'bar')

traceback (most recent call last):

file "", line 1, in attributeerror: 'myclass' object has no attribute 'bar'

>>> getattr(myinst, 'bar', 'oops!')

'oops!'

>>> setattr(myinst, 'bar', 'my attr')

>>> getattr(myinst, 'bar')

'my attr'

>>> delattr(myinst, 'foo')

>>> hasattr(myinst, 'foo')

false

4、dir()

用 dir() 列出乙個模組所有屬性的資訊。

a. dir() 作用在例項上時,顯示例項變數,還有在例項所在的類及所有它的基類中定義的方法和類屬性

b. dir() 作用在類上時,則顯示類以及它的所有基類的__dict__中的內容。

c. dir() 作用在模組上時,則顯示模組的 __dict__的內容。

d. dir() 不帶引數時,則顯示呼叫者的區域性變數。

5、super()

這個函式的目的就是幫助程式設計師找出相應的父類,然後方便呼叫相關的屬性。super() 返回了乙個 super 物件,這個物件負責進行方法解析。當對其特性進行反問時,他會查詢所有的超類(以及超類的超類),直到找到所需的特性為止。

6、vars()

vars() 返回乙個字典,它包含了物件儲存於其 __dict__ 中的屬性(鍵)和值。

>>> class c:

... pass

...>>> c = c()

>>> c.foo = 100

>>> c.bar = 'python'

>>> c.__dict__

>>> vars(c)

如果沒有提供物件作為 vars() 的乙個引數,它將顯示乙個包含本地名字空間的屬性(鍵)及其值的字典,也就是,locals()。

python類物件和例項物件

類物件支援兩種操作 屬性引用和例項化。屬性引用 使用 python 中所有屬性引用所使用的標準語法 obj.name。有效的屬性名稱是類物件被建立時存在於類命名空間中的所有名稱。因此,如果類定義是這樣的 a example class i 12345 def f self return hello ...

類 例項及其他物件的內建函式

函式 issubcalss sub,sup 描述 如果類sub是類sup的子類,則返回true,否則返回false 例項 class c1 pass class c2 pass class p c1 pass issubclass p,c1 true issubclass p,c2 false函式 ...

python 類,物件 例項

簡單示例 類方法 python 類方法和例項方法相似,它最少也要包含乙個引數,只不過,類方法中通常將其命名為 cls,且 python 會自動將類本身繫結給 cls 引數 而不是類物件 因此,在呼叫類方法時,無需顯式為 cls 引數傳參。類靜態方法 靜態方法,其實就是我們學過的函式,和函式唯一的區別...