python getattr函數_Python中的getattr()函數詳解

在計算機編程中,自省是指這種能力:檢查某些事物以確定它是什么、它知道什么以及它能做什么。自省向程序員提供了極大的靈活性和控制力。

自省(introspection),在計算機編程領域里,是指在運行時來判斷一個對象的類型的能力。它是Python的強項之一。Python中所有一切都是一個對象,而且我們可以仔細勘察那些對象。Python還包含了許多內置函數和模塊來幫助我們。

一直很奇怪自省和反射的區別,搞不清楚它們的區別,我想,python中的自省就是java中的反射吧。

反射的作用就是列出對象的所有屬性和方法,反射就是告訴我們,這個對象到底是什么,提供了什么功能 。

http://www.cnblogs.com/pylemon/archive/2011/06/09/2076862.html

最近看Dive into python第四章自省中提到getattr()函數,作為一個內建函數平時自己沒怎么用過所以也不太理解這個函數的一些用法

看了下函數本身的doc

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.

根據字符串名字,找對應的方法

解釋的很抽象 告訴我這個函數的作用相當于是

object.name

試了一下getattr(object,name)確實和object.name是一樣的功能.只不過這里可以把name作為一個變量去處理

書上的例子很好的說明了這個函數的功用

使用getattr可以輕松實現工廠模式。

例:一個模塊支持html、text、xml等格式的打印,根據傳入的formate參數的不同,調用不同的函數實現幾種格式的輸出

這個例子中可以根據傳入output函數的format參數的不同 去調用statsout模塊不同的方法(用格式化字符串實現output_%s)

返回的是這個方法的對象 就可以直接使用了 如果要添加新的格式 只需要在模塊中寫入新的方法函數 在調用output函數時使用新的參數就可以使用不同的格式輸出

確實很方便

為了加深對getattr函數的理解 轉載一篇英文的說明

Python’s?getattr?function?is used to fetch an attribute from an object, using a string object instead of an identifier to identify the attribute. In other words, the following two statements are equivalent:

value = obj.attribute

value = getattr(obj, "attribute")

If the attribute exists, the corresponding value is returned. If the attribute does not exist, you get an?AttributeError?exception instead.

The?getattr?function can be used on any object that supports dotted notation (by implementing the?__getattr__?method). This includes class objects, modules, and even function objects.

path = getattr(sys, "path")

doc = getattr(len, "__doc__")

The?getattr?function uses the same lookup rules as ordinary attribute access, and you can use it both with ordinary attributes and methods:

result = obj.method(args)

func = getattr(obj, "method")

result = func(args)

or, in one line:

result = getattr(obj, "method")(args)

Calling both?getattr?and the method on the same line can make it hard to handle exceptions properly. To avoid confusing AttributeError exceptions raised by?getattr?with similar exceptions raised inside the method, you can use the following pattern:

try:

func = getattr(obj, "method")

except AttributeError:

... deal with missing method ...

else:

result = func(args)

The function takes an optional default value, which is used if the attribute doesn’t exist. The following example only calls the method if it exists:

func = getattr(obj, "method", None)

if func:

func(args)

Here’s a variation, which checks that the attribute is indeed a callable object before calling it.

func = getattr(obj, "method", None)

if callable(func):

func(args)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/528962.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/528962.shtml
英文地址,請注明出處:http://en.pswp.cn/news/528962.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ie8不兼容java項目_常見IE8兼容性問題及解決

1、css3媒體查詢IE8不支持媒體查詢解決:respond.js,在頁面中所有css文件的引用位置之后引用Respond.js2、HTML5新標簽IE8不支持H5新標簽解決:html5shiv.js,在頁面中引用html5shiv.js文件。必須添加在頁面的元素內,因為…

python對圖像二值化_python如何二值化圖像

在python中二值化圖像的方法:首先將圖片轉化為灰色圖像;然后自定義灰度界限;最后輸入“photoImg.point(table,1)”命令(table為自己創建的數組名)即可二值化圖像。# 圖片二值化代碼如下:from PIL import Imageimg Image.open(tes…

Java快速提升_java快速復習 一 基礎語法

最近看很多算法書,比較不錯的有不少都是java語言描述,所以用一天時間快速研究并整理java ,參考資料:java入門經典Call this file "Example2.java".class Example2 {public static void main(String args[]) {int a&…

酷狗音樂linux版_酷狗音樂概念版APP內測獲用戶好評:極簡化,更高級

這兩天在網上沖浪的時候,發現不少網友都在安利一個叫做“酷狗音樂概念版”的APP,難道是酷狗又在悶聲搞大事了?搜了一下發現,原來是酷狗音樂概念版APP已經開始進入內測階段,嘗試著下載使用,果然發現“更酷更…

java 計算器類圖_多態計算器(封裝、繼承、多態、簡單工廠)

一.封裝向對象程序設計中,一個非常重要的技術便是封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。這樣做的好處在于可以使類內部的具體實現透明化&#xff…

圖書管理系統 java 源碼_[源碼和文檔分享]基于C語言和SQL SERVER數據庫實現的圖書管理系統...

摘 要本文根據《數據庫應用系統設計》課程要求而做。選擇圖書館管理系統設計與開發是因為覺得圖書館管理系統對我們的幫助很大,并且經常去圖書館,對圖書館的大部分功能及流程還是比較了解,而且現在有些地方可能還不夠完善。這次課程設計目標是…

java useragent 360 遨游 火狐_各種瀏覽器UserAgent一覽表(桌面+移動)

桌面IE而IE各個版本典型的userAgent如下:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)其中&#x…

sql server 修改字段不能為空_SQL-SQL介紹

一SQL 介紹SQL(Structured Query Language),語義是結構化語言, 是一門 ANSI 的標準計算機語言,用來訪問和操作數據庫系統;二 數據庫介紹2.1 數據庫我們已經知道了SQL是操作數據庫的語言,那么數據庫是什么&a…

python 數組轉音頻_Python3+將2聲道音頻,分拆成1聲道

現在是將雙聲道的音頻分拆成單聲道的。同理可以將多聲道的音頻文件,轉為1聲道的音頻文件。注意新形成的音頻文件的rate,需要與原音頻的相同。import osimport waveimport numpy as npimport pyaudiofile1 os.path.join(os.path.abspath(os.path.dirname…

java定義一個矩陣的類_java寫入一個矩陣,如何編程求該矩陣的秩

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓Fraction.java如下:(這個是網上找來的,處理分數的類)// 支持查找功能的分數類class Fraction implements Comparable {// 分子private int numerator;// 分母private int denominator;// 默認構造函數public Fraction()…

python動態映射_Python Django框架url反向解析實現動態生成對應的url鏈接示例

本文實例講述了Python Django框架url反向解析實現動態生成對應的url鏈接。分享給大家供大家參考,具體如下:url反向解析:根據url路由規則,動態生成對應的url鏈接 (防止硬編碼)。url反向解析應用在兩個地方:模板中的超鏈接&#xff…

java標量替換_JAVA逃逸分析、棧上分配、標量替換、同步消除

一、逃逸分析逃逸分析是編譯語言中的一種優化分析,而不是一種優化的手段。通過對象的作用范圍的分析,為其他優化手段提供分析數據從而進行優化。逃逸分析包括:全局變量賦值逃逸方法返回值逃逸實例引用發生逃逸線程逃逸:賦值給類變量或可以在其…

python圖像人類檢測_OpenCV人類行為識別(3D卷積神經網絡)

1. 3D卷積神經網絡相比于2D 卷積神經網絡,3D卷積神經網絡更能很好的利用視頻中的時序信息。因此,其主要應用視頻、行為識別等領域居多。3D卷積神經網絡是將時間維度看成了第三維。人類行為識別的實際應用:安防監控。(檢測識別異常行為&#x…

Spring Cloud Feign作為HTTP客戶端調用遠程HTTP服務

如果你的項目使用了SpringCloud微服務技術,那么你就可以使用Feign來作為http客戶端來調用遠程的http服務。當然,如果你不想使用Feign作為http客戶端,也可以使用比如JDK原生的URLConnection、Apache的Http Client、Netty的異步HTTP Client或者Spring的RestTemplate。 那么,為…

java查看weblogic服務器_java判斷服務器是那種,例如區分tomcat和weblogic | 學步園

package com.geostar.query.util;import org.apache.log4j.Logger;/*** author likehua* 服務器類型探測* Date 2011/04/13* **/public class ServerUtil {public static final String GERONIMO_CLASS "/org/apache/geronimo/system/main/Daemon.class";public s…

拼接的option會多出空行_Word空格,空行,頁眉橫線等問題,我只花一分鐘就全解決了...

從網上復制下來的資料粘貼到Word文檔上,出現了許多空格、空行、頁眉橫線等問題,這時候我們該如何快速地解決這些問題,看看下面的操作你就知道了。一、刪除空格1、空格案例從網上復制下來的文字到Word文檔中,出現字與字之間有好多空…

基于java高校教師管理系統_基于SSM框架下的JAVA高校教師業務水平綜合管理系統...

每天記錄學習,每天會有好心情。*^_^*今天和一個朋友共同完成了一個高校教師業務水平綜合管理系統項目,我們在開發時選用的框架是SSM(MYECLIPSE)框架。我這個朋友知識有限,只會這個框架,哈哈,都是為了方便他。和往常一樣…

oracle連接工具_扯一扯Tableau軟件配置數據源系列之Oracle

作者:扯蛋君編輯:齊天大圣聲明:本文章僅用于Taleau軟件的應用、學習溝通,不代表Taleau公司;文中所示截圖來源Taleau官方及軟件公開內容,相應著作權歸Tableau所有。 今天給大家介紹Tableau工具如何連接數據庫…

在java中原始時間_Java 日期時間

Java 日期時間java.util包提供了Date類來封裝當前的日期和時間。 Date類提供兩個構造函數來實例化Date對象。第一個構造函數使用當前日期和時間來初始化對象。Date( )第二個構造函數接收一個參數,該參數是從1970年1月1日起的微秒數。Date(long millisec)Date對象創建…

如何和后臺接觸的_后臺產品,不只是做支持

最近在招聘后臺產品經理,面試過程中提到一個問題,這個問題之前也困擾了我很久:你做的后臺產品,價值體現在哪里?只是做業務支持么?今天就來聊聊這個話題。我是做后臺產品出身,最開始入行做的是云…