日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

课时40:类与对象:一些相关的BIF

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 课时40:类与对象:一些相关的BIF 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

   一、一些相關的BIF

   二、、課時40課后習題及答案

?

**********************?

一、一些相關的BIF

**********************

1、issubclass(class,classinfo)

如果第一個參數(class)是第二個參數(classinfo)的一個子類,則返回True,否則返回False:

(1)一個類被認為是其自身的子類。

(2)classinfo可以是類對象組成的元組,只要class是其中任何一個候選類的子類,則返回True。

(3)在其它情況下,會拋出一個TypeError異常。

>>> class A:pass>>> class B(A):pass>>> issubclass(B,A) True >>> issubclass(B,B) True >>> issubclass(B,object)#object是所有類的基類 True >>> class C:pass>>> issubclass(B,C) False

?

2、isinstance(object,classinfo)

?如果第一個參數(object)是第二個參數(classinfo)的實例對象,則返回True,否則,返回False:

(1)如果object是classinfo的子類的一個實例,也符合條件。

(2)如果第一個參數不是對象,則永遠返回False。

(3)classinfo可以是類對象組成的元組,只要object是其中任何一個候選對象的實例,則返回True。

(4)如果第二個參數不是類或者由類對象組成的元組,會拋出一個TypeError的異常。

>>> issubclass(B,C) False >>> b1 = B() >>> isinstance(b1,B) True >>> isinstance(b1,C) False >>> isinstance(b1,A) True >>> isinstance(b1,(A,B,C))

?

Python提供一下幾個BIF用于訪問對象的屬性。

3、hasattr(object,name)

attr即attribute的縮寫,屬性的意思。接下來介紹的幾個BIF都是跟對象的屬性有關系的,例如這個hasattr()的作用就是測試一個對象里是否指定的屬性。

第一個參數(object)是對象,第二個參數(name)是屬性名(屬性的字符串名字),舉個例子:

>>> class C:def __init__(self,x=0):self.x = x>>> c1 = C() >>> hasattr(c1,'x') #注意屬性名要用引號括起來 True

?

4、getattr(object,name[,default])

返回對象指定的屬性值,如果指定的屬性不存在,則返回default(可選參數)的值;若沒有設置default參數,則拋出ArttributeError異常。

>>> getattr(c1,'x') 0 >>> getattr(c1,'y') Traceback (most recent call last):File "<pyshell#29>", line 1, in <module>getattr(c1,'y') AttributeError: 'C' object has no attribute 'y'

?

5、setattr(object,name,value)

與getattr()對應,setattr()可以設置對象中指定屬性的值,如果指定的屬性不存在,則會新建屬性并賦值。

>>> setattr(c1,'y','FishC') >>> getattr(c1,'y') 'FishC'

?

6、delattr(object,name)

與setattr()相反,delattr()用于刪除對象中指定的屬性,如果屬性不存在,則拋出ArttributeError異常。

>>> delattr(c1,'y') >>> delattr(c1,'z') Traceback (most recent call last):File "<pyshell#35>", line 1, in <module>delattr(c1,'z') AttributeError: z

?

7、property(fget = None,fset = None,fdel = None,doc = None)

俗話說:條條大路通羅馬。同樣是完成一件事,Python其實提供了好幾種方式供你選擇。property()是一個比較奇葩的BIF,它的作用是通過屬性來設置屬性。說起來有點繞,看一下例子:

class C:def __init__(self,size = 10):self.size = sizedef getSize(self):return self.sizedef setSize(self,value):self.size = valuedef delSize(self):del self.sizex = property(getSize,setSize,delSize) >>> c1 = C() >>> c1.getSize() 10 >>> c1.x 10 >>> c1.x = 18 >>> c1.x 18 >>> c1.size 18 >>> c1.getSize() 18 >>> del c1.x >>> c1.size Traceback (most recent call last):File "<pyshell#9>", line 1, in <module>c1.size AttributeError: 'C' object has no attribute 'size'

property()返回一個可以設置屬性的屬性,當然如何設置屬性還是需要人為來寫代碼。第一個參數是獲取屬性的方法名(例子中是getSize),第二個參數是設置屬性的方法名(例子中是setSize),第三個參數是刪除屬性的方法名(例子中是delSize)。

property()有什么用呢?舉個例子,在上面的例題中,為用戶提供setSize方法名來設置size屬性,并提供getSize方法名來獲取屬性。但是有一天你心血來潮,突然像對程序進行大改,就可能把setSize和getSize修改為setXSize和getXSize,那就不得不修改用戶調用的接口,這樣的體驗很不好。

有了property(),所有的問題都迎刃而解了,因為像上邊一樣,為用戶訪問size屬性只提供了x屬性。無論內部怎么改動,只需要相應的修改property()的參數,用戶仍然只需要去操作x屬性即可,沒有任何影響。

很神奇是吧?想知道它是如何工作的?下一章節會講到。

?

**********************************

二、、課時40課后習題及答案

**********************************

?

?

轉載于:https://www.cnblogs.com/DC0307/p/9527216.html

總結

以上是生活随笔為你收集整理的课时40:类与对象:一些相关的BIF的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。