內容來源于網絡,本人只是在此稍作整理,如有涉及版權問題,歸小甲魚官方所有。
0.請寫下這一節課你學習到的內容:格式不限,回憶并復述是加強記憶的好方式!
- 內置方法
- issubclass(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)
True
>>> class C:
pass
>>> issubclass(B,C)
False
>>> issubclass(B,(A,C))
True
>>> issubclass(B,111)
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
issubclass(B,111)
TypeError: issubclass() arg 2 must be a class or tuple of classes
- isinstance(object, classinfo)
如果第一個參數是第二個參數的實例對象,則返回True,否則返回False:
1??如果object是classinfo的子類的一個實例,也符號條件。
2??如果第一個參數不是對象,則永遠返回False。
3??classinfo可以是類對象組成的元組,只要object是其中任何一個候選對象的實例,則返回True。
4??如果第二個參數不是類或者由類對象組成的元組,會拋出一個TypeError異常。
>>> class A:
pass
>>> class B(A):
pass
>>> class C:
pass
>>> issubclass(B,C)
False
>>> b1 = B()
>>> isinstance(b1,B)
True
>>> isinstance(b1,A)
True
>>> isinstance(b1,C)
False
>>> isinstance(b1,object)
True
>>> isinstance(b1,(A,B,C))
True
>>> isinstance(111,A)
False
>>> isinstance(b1,111)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
isinstance(b1,111)
TypeError: isinstance() arg 2 must be a type or tuple of types
- hasattr(object, name)
attr即attribute的縮寫,屬性的意思。其作用就是測試一下對象里是否有指定的屬性。
第一個參數是對象,第二個參數是屬性名(屬性的字符串名字),舉個例子:
>>> class C:
def __init__(self, x=0):
self.x = x
>>> c1 = C()
>>> hasattr(c1, 'x')
True
>>> hasattr(c1, 'y')
False
- getattr(object, name[, default])
返回對象指定的屬性值,如果指定的屬性不存在,則返回default(可選參數)的值;若沒有設置default參數,則拋出AttributeError異常。
>>> class C:
def __init__(self, x=0, y=1):
self.x = x
self.y = y
>>> c1 =C()
>>> getattr(c1, 'x')
0
>>> getattr(c1, 'y')
1
>>> getattr(c1, 'z')
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
getattr(c1, 'z')
AttributeError: 'C' object has no attribute 'z'
>>> getattr(c1, 'z', '您訪問的屬性不存在')
'您訪問的屬性不存在'
- setattr(object, name, value)
用來設置對象中指定屬性的值,如果指定的屬性不存在,則新建屬性并賦值。
>>> setattr(c1, 'x', 111) # 原來有的覆蓋
>>> getattr(c1, 'x')
111
>>> setattr(c1, 'z', 2) # 沒有新建并賦值
>>> getattr(c1, 'z')
2
- delattr(object, name)
用來刪除對象中指定的屬性,如果屬性不存在,則拋出AttributeError異常。
>>> delattr(c1, 'x')
>>> delattr(c1, 'y')
>>> delattr(c1, 'z')
>>> delattr(c1, 'aaa')
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
delattr(c1, 'aaa')
AttributeError: aaa
>>>
- property(fget=None, fset=None, fdel=None, doc=None)
用來通過屬性來設置屬性。
>>> class C:
def __init__(self, size=10):
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)
>>> c = C()
>>> c.x
10
>>> c.x = 12
>>> c.x
12
>>> c.size
12
>>> del c.x
>>> c.size
Traceback (most recent call last):
File "<pyshell#79>", line 1, in <module>
c.size
AttributeError: 'C' object has no attribute 'size'
property()函數中的三個函數分別對應的是獲取屬性的方法、設置屬性的方法以及刪除屬性的方法,這樣一來,外部的對象就可以通過訪問x的方式,來達到獲取、設置或刪除屬性的目的。
當需要更改上例中的getSize、setSize或delSize函數的名稱時,如果這些方法是作為接口讓用戶調用的,那么對用戶而言就要修改自己調用的方法名,很麻煩,使用了proprty()后,用戶就不需擔心這種問題了。