摘自謬雪峰:
isinstance([1, 2, 3], (list, tuple))true
isinstance((1, 2, 3), (list, tuple))
true
總是優先使用isinstance()判斷型別,可以將指定型別及其子類「一網打盡」。
僅僅把屬性和方法列出來是不夠的,配合getattr()、setattr()以及hasattr(),我們可以直接操作乙個物件的狀態:
class myobject(object):... definit(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...obj = myobject()
緊接著,可以測試該物件的屬性:
hasattr(obj, 'x') # 有屬性'x'嗎?true
obj.x
9hasattr(obj, 'y') # 有屬性'y'嗎?
false
setattr(obj, 'y', 19) # 設定乙個屬性'y'
hasattr(obj, 'y') # 有屬性'y'嗎?
getattr(obj, 'z', 404) # 獲取屬性'z',如果不存在,返回預設值404404
def readimage(fp):
if hasattr(fp, 'read'):
return readdata(fp)
return none
假設我們希望從檔案流fp中讀取影象,我們首先要判斷該fp物件是否存在read方法,如果存在,則該物件是乙個流,如果不存在,則無法讀取。hasattr()就派上了用場。
請注意,在python這類動態語言中,根據鴨子型別,有read()方法,不代表該fp物件就是乙個檔案流,它也可能是網路流,也可能是記憶體中的乙個位元組流,但只要read()方法返回的是有效的影象資料,就不影響讀取影象的功能。
什麼是類屬性:
class school(object):
name='junior high' # name 就是乙個類屬性
pass
什麼是例項屬性:
a = school(object):
a.name='senior high' # name 就是乙個類屬性
pass
相同名稱的例項屬性將遮蔽掉類屬性,但是當你刪除例項屬性後,再使用相同的名稱,訪問到的將是類屬性。栗子
Python屬性和方法
類屬性 類屬性,直接在類中定義的屬性是類屬性,類屬性可以通過類或類的例項訪問到,但是類屬性只能通過類物件來修改,無法通過例項物件修改 例項屬性 例項屬性,通過例項物件新增的屬性屬於例項屬性,例項屬性只能通過例項物件來訪問和修改,類物件無法訪問修改 類方法 例項方法 靜態方法 定義乙個類 class ...
Python 類的屬性和方法
定義乙個類 class a object 類屬性 例項屬性 類方法 例項方法 靜態方法 類屬性,直接在類中定義的屬性是類屬性 類屬性可以通過類或類的例項訪問到 但是類屬性只能通過類物件來修改,無法通過例項物件修改 count 0 def init self 例項屬性,通過例項物件新增的屬性屬於例項屬...
python之方法和屬性
構造方法 init self class bird def init self self.hunger true def eat self if self.hunger print aaaah.self.hunger false else print no.thanks b bird print b...