零基礎入門學習Python(20):對象(5)類和對象的內置函數

零基礎入門學習Python(20):對象(5)類和對象的內置函數

作爲對象的最後一節內容,下面通過舉例介紹一下類和對象的一些相關的內置函數(BIF)。

1、issubclass(class, classinfo):判斷class是不是classinfo的子類

1)一個類被認爲是其自身的子類,object是所有類的基類;

2)classinfo可以是類對象組成的元組,只要class是其中一個候選類的子類,則返回True,其他情況拋出TypeError異常。

>>> class A:
        pass

>>> class B(A):               #類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 ):檢查一個實例對象是否屬於一個類

1)如果第一個參數不是對象,則永遠返回False;

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

>>> b1 = B()                 #創建一個B的實例對象
>>> isinstance(b1,B)
True
>>> isinstance(b1,A)         #A是B的基類,B的對象也屬於A的對象
True
>>> isinstance(B,A)          #第一個參數必須是對象
False
>>> isinstance(b1,(A,B,C))   #只要b1是類組成的元組中的任意一個類的實例對象,函數都返回True
True

3、hasattr(object,name):測試一個對象裏面是否有指定的屬性,其中,object是對象,name是用表示字符串的引號引起來的屬性名。

>>> c1 = C()
>>> hasattr(c1,'x')          #上面定義的類C中沒有定義任何屬性,所以其對象c1中沒有屬性x
False
>>> class C:                 #重新定義C,則其擁有屬性x
        x = 2

>>> c1 = C()
>>> hasattr(c1,'x')
True

4、getattr(object, name[,default]):獲得類或對象的屬性

>>> getattr(c1,'x')          #獲得對象c1的x屬性
2
>>> getattr(C,'x')
2
>>> getattr(c1,'y')          #獲得不存在的屬性時會拋出AttributeError異常
Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    getattr(c1,'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c1,'y','NoExist')  #第三個參數可以用來設置出錯時要顯示的內容
'NoExist'

5、setattr(object, name, value):設置類或對象的屬性

>>> setattr(c1,'y',7)        #設置對象的一個y屬性值爲7
>>> getattr(c1,'y','NoExist')
7
>>> setattr(C,'z',1)         #設置類C的一個z屬性值爲1
>>> getattr(c1,'z','NoExist')#此時可以通過對象c1獲得類C設置的屬性值
1
>>> getattr(C,'y','NoExist') #但是通過類C不能獲得其對象c1設置的屬性值
'NoExist'

6、delattr(object, name):刪除類或對象的屬性

>>> delattr(c1,'y')          #刪除對象c1的y屬性
>>> getattr(c1,'y','NoExist')
'NoExist'
>>> delattr(c1,'z')          #不能通過對象刪除其類中定義的屬性
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    delattr(c1,'z')
AttributeError: z

7、property(fget = None, fset = None, fdel = None, doc = None):設置屬性的屬性

>>> class A:
        def __init__(self, size = 7):
            self.size = size
        def getSize(self):
            return self.size
        def setSize(self, value):
            self.size = value
        def delSize(self):
            del self.size
        x  = property(getSize, setSize, delSize)

>>> a1 = A()
>>> a1.getSize()
7
>>> a1.x                     #通過訪問對象的x屬性也可以得到size屬性的值
7
>>> a1.x = 10                #通過x修改屬性size
>>> a1.size
10
>>> del a1.x                 #刪除x屬性之後,size屬性也被刪除了
>>> a1.size
Traceback (most recent call last):
  File "<pyshell#65>", line 1, in <module>
    a1.size
AttributeError: 'A' object has no attribute 'size'

零基礎入門學習Python(19):對象(4)組合、綁定

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章