python的屬性和方法

2022-01-19 11:28:08 字數 1745 閱讀 2492

摘自謬雪峰:

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',如果不存在,返回預設值404

404

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...