標籤:
本文和大家分享的主要是python內建函數getattr()相關內容,一起來看看吧,希望對大家學習python http://www.maiziedu.com/land/python/有所協助。 上述代碼查看傳送門 記錄 getattr是python裡的一個內建函數,先看定義 >>> help(getattr) Help on built-in function getattr in module __builtin__: getattr(...) getattr(object, name[, default]) -> value Get a named attribute from an object; getattr(x, ’y’) is equivalent to x.y. When a default argument is given, it is returned when the attribute doesn’t exist; without it, an exception is raised in that case. >>> getattr()的三個參數: · object : 要執行個體化的對象 · name : 要執行的命令操作 · default :(可省略參數)當要執行的命令操作不存在是,會返回這裡傳入的default getattr()主要的作用是通過傳入字串的方式,來動態擷取方法的執行個體。這個函數最大的用處在於函數解耦,可以講一些可能會調用的方法,寫到一個設定檔中,在需要的時候動態載入。 解釋的比較抽象,簡單來說: getattr(object, name) 等價於 object.name 下面通過代碼說明一下 for i in range(t): c, *args = map(str,input().split()) getattr(s,c) (*(int(x) for x in args)) 這段代碼實現了使用者從 stdin 輸入命令和參數,命令賦值給了 c ,參數傳給了一個指標變數*args ,這裡使用 *args 是為了接收不確定個數的參數。然後調用 getattr(s,c) 來執行 c 這條指令(註: s 是一串字串),此處 getattr(s,c) 就可以等價於s.c ,後面括弧內 (*(int(x) for x in args)) ,這裡是一個產生器運算式,這部分稱為參數解包,它類似於如何定義具有任意數量(位置)參數的函數 — * 在序列之前將遍曆序列並將其成員變為函數調用參數。 可以看出,這樣的用法比枚舉的思路方便了很多,也具有更高的擴充性。 延伸 Python中和getattr相關的還有 hasattr 、 setattr 、 delattr ,通過舉例瞭解一下。 #定義一個類對象class Vimiix: def __init__(self): self.name = ’vimiix’ def setName(self, name): self.name = name def getName(self): return self.name #執行個體化對象 foo = Vimiix() hasattr(object, name) 判斷object是否具有name屬性 >>>hasattr(foo,’getName’) True setattr(object,name,default) 設定一個新的屬性,並賦予值.類似foo.age = 18 >>>setattr(foo, ’age’, ’18’) delattr(object, name) 刪除object對象的name屬性 >>>delattr(foo, ’age’)>>>getattr(foo, ’age’, ’Not find’) ’Not find’來源:Vimiix
Python的內建函數getattr()如何使用?