和類相關的BIF

2022-02-10 06:34:45 字數 3846 閱讀 8835

issubclass(class,classinfo),判斷第乙個引數是第二個引數的子類,這個判斷是比較寬鬆的判斷。因為第二個引數也可以是元組,並且只要引數1是元組內任意乙個元素的子元素,就會返回true。

>>> class

a:

pass

>>> class

b:

pass

>>> class

c(a):

pass

>>>issubclass(c,a)

true

>>>issubclass(c,b)

false

#c是元組內任意乙個元素的子類即返回true

>>>issubclass(c,(a,b))

true

>>>issubclass(c,(b,a))

true

c同時是c自己的子類

>>>issubclass(c,c)

true

#object是所有類的基類

>>>issubclass(a,object)

true

isinstance(object,classinfo),判斷引數1是引數2(一定要是乙個類,如果不是類那麼會丟擲typeerror)的物件:

#

例項化乙個c

>>> c =c()

#判斷c是c的例項化物件

>>>isinstance(c,c)

true

#判斷c是b的例項化物件

>>>isinstance(c,b)

false

#由於c是a的子類,所以c也是a的物件

>>>isinstance(c,a)

true

#由於object是所有類的基類所以c也是object的例項化物件

>>>isinstance(c,object)

true

#判斷c是否是元組內某個元素的例項化物件

>>>isinstance(c,(a,b))

true

#當第二個引數不是類的時候,丟擲typeerror異常

>>> isinstance(c,1)

traceback (most recent call last):

file

"", line 1, in

isinstance(c,1)

typeerror: isinstance() arg 2 must be a type or

tuple of types

>>>

hasattr(object,name),測試乙個物件是否有指定的屬性。

>>> class

c(a):

def__init__

(self,x):

self.x = x #

為屬性x賦初始值

>>> c = c(10)

#判斷x是否是物件c中的屬性 引數2一定要加引號

>>> hasattr(c,'x'

)true

>>> hasattr(c,'a'

)false

#如果引數2不帶引號,則會丟擲異常

>>>hasattr(c,x)

traceback (most recent call last):

file

"", line 1, in

hasattr(c,x)

nameerror: name 'x

'isnotdefined

>>>

getattr(object,name[,default]),在乙個物件中獲取指定屬性,引數1(object)是例項化物件,引數2(name)是屬性名,引數3(default)是可選引數,當不設定引數3的時候如果這個時候訪問的屬性不存在,則會丟擲異常,但是如果設定引數3,則會將引數3丟擲,相對比較友好。

>>> getattr(c,'x'

)10>>> getattr(c,'xx'

)traceback (most recent call last):

file

"", line 1, in

getattr(c,'xx

')attributeerror: 'c

' object has no attribute 'xx'

>>> getattr(c,'

xx','

您訪問的屬性不存在')

'您訪問的屬性不存在

'>>>

setattr(object,name,value),訪問物件屬性,並且給該屬性賦值,如果該屬性不存在,則會為該物件建立該屬性,並且賦值,三個引數都不能為空

>>> setattr(c,'

y','

我愛中國')

>>> getattr(c,'y'

)'我愛中國

'>>> setattr(c,'y'

)traceback (most recent call last):

file

"", line 1, in

setattr(c,'y

')typeerror: setattr expected 3 arguments, got 2

>>> setattr(c,'

y','

愛國主義者')

>>> getattr(c,'y'

)'愛國主義者

'>>>

delattr(object,name),刪除物件屬性,如果屬性不存在,丟擲異常

>>> delattr(c,'y'

)>>> delattr(c,'xx'

)traceback (most recent call last):

file

"", line 1, in

delattr(c,'xx

')attributeerror: xx

>>>

property(fget=none,fset=none,fdel=none,doc=none),它的作用是在乙個類中設定乙個屬性來方便呼叫這個類中的其他屬性。

>>> class

c():

def__init__(self,size=10):

self.size =size

defgetsize(self):

return

self.size

defsetsize(self,value):

self.size =value

defdelsize(self):

delself.size

x =property(getsize,setsize,delsize)

>>>

>>> c1 =c()

#在沒有定義property以前我們訪問和設定方法屬性

>>> c1.setsize(10)

>>>c1.getsize()10#

定義了property之後我們訪問和設定方法屬性

>>>c1.x

10>>> c1.x = 20

>>>c1.x

20>>> del

c1.x

>>>c1.x

traceback (most recent call last):

file

"", line 1, in

c1.x

file

"", line 5, in

getsize

return

self.size

attributeerror: 'c

' object has no attribute '

size

'>>>

類和物件 相關的BIF

一 issubclass class,classinfo 如果說第乙個引數是第二個引數的子類則返回true 注意 乙個類會被認為是自身的子類 classinfo 可以是類物件組成的元祖,只要class是其中 任何乙個候選類的子類,則返回true class a pass class b a pass...

Python和類相關的一些BIF

issubclass class,classinfo class是否是classinfo的子類 繼承關係 classa def init self self.x 1def getsize self return self.x defsetsize self,value self.x value de...

類和物件的一些BIF

issubclass 用於判斷自己的子類 issubclass a,b a是不是b的子類,是返回true 否則 false 自身也屬於自己的子類 isinstance object,classinfo 用於檢查乙個例項物件是否屬於乙個類 classinfo 可以傳入乙個元組 class a obje...