课时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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018ACM-ICPC国际大学生程序设
- 下一篇: POI Excel解析