例項屬性和方法的動態處理 getattr

2022-06-25 13:42:16 字數 1036 閱讀 4568

正常情況下,當呼叫類的方法或屬性時,如果不存在,就會報錯

要避免這個錯誤,除了可以加上那個要呼叫但不存在的屬性外,python還有另乙個機制,那就是寫乙個__getattr__()方法,動態返回乙個屬性

只有在沒有找到屬性的情況下,才呼叫__getattr__,已有的屬性會直接在類屬性裡查詢,不會在__getattr__中查詢

class

student(object):

def__init__

(self):

self.name = '

michael

'def

__getattr__

(self, attr):

if attr=='

score':

return 99

if attr=='

age'

:

return

lambda: 25

#要讓class只響應特定的幾個屬性,我們就要按照約定,丟擲attributeerror的錯誤

raise attributeerror('

\'student\' object has no attribute \'%s\'

' %attr)

s =student()

print(s.name) #

輸出:'michael'

print(s.score) #

輸出:99,當呼叫不存在的score屬性時,python直譯器會呼叫__getattr__(self, 'score')來嘗試獲得屬性,這樣就會返回score的值

s.age() #

輸出:25,返回函式也是完全可以的

print(s.abc) #

輸出:none,任意呼叫如s.abc都會返回none,因為定義的__getattr__預設返回就是none

可以把乙個類的所有屬性和方法呼叫全部動態化處理了,不需要任何特殊手段

這種完全動態呼叫的特性的作用就是,可以針對完全動態的情況作呼叫

75 例項屬性和例項方法

例項屬性是從屬於例項物件 建立的餅乾 的屬性,也稱為 例項變數 他的使用有如下幾個要點 例項屬性一般在 init 方法中通過如下 定義 在本類的其他例項方法中,也是通過self 進行訪問 建立例項物件後,通過例項物件訪問 例項方法是從屬於例項物件的方法。例項方法的定義格式如下 def 方法名 sel...

動態新增屬性和方法

import types 新增方法的庫 新增動態方法 def lookstate self print 使用者 使用者名稱 年齡 密碼 format self.name,self.admin,self.age,self.password pass 動態新增乙個類方法 classmethod def ...

js中 object 屬性 和 例項屬性方法

object 物件具有以下屬性 不包括繼承的屬性和方法 屬性 prototype 對該物件的物件原型的引用。對於所有的物件,它預設返回 object 物件的乙個例項。它是乙個給類的物件新增方法的方法 object 物件例項 屬性 constructor 對建立物件的函式的引用 指標 對於object...