国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中獲取對象信息的方法

2020-02-23 00:53:02
字體:
來源:轉載
供稿:網友

當我們拿到一個對象的引用時,如何知道這個對象是什么類型、有哪些方法呢?
使用type()

首先,我們來判斷對象類型,使用type()函數:

基本類型都可以用type()判斷:

>>> type(123)<type 'int'>>>> type('str')<type 'str'>>>> type(None)<type 'NoneType'>

如果一個變量指向函數或者類,也可以用type()判斷:

>>> type(abs)<type 'builtin_function_or_method'>>>> type(a)<class '__main__.Animal'>

但是type()函數返回的是什么類型呢?它返回type類型。如果我們要在if語句中判斷,就需要比較兩個變量的type類型是否相同:

>>> type(123)==type(456)True>>> type('abc')==type('123')True>>> type('abc')==type(123)False

但是這種寫法太麻煩,Python把每種type類型都定義好了常量,放在types模塊里,使用之前,需要先導入:

>>> import types>>> type('abc')==types.StringTypeTrue>>> type(u'abc')==types.UnicodeTypeTrue>>> type([])==types.ListTypeTrue>>> type(str)==types.TypeTypeTrue

最后注意到有一種類型就叫TypeType,所有類型本身的類型就是TypeType,比如:

>>> type(int)==type(str)==types.TypeTypeTrue

使用isinstance()

對于class的繼承關系來說,使用type()就很不方便。我們要判斷class的類型,可以使用isinstance()函數。

我們回顧上次的例子,如果繼承關系是:

代碼如下:object -> Animal -> Dog -> Husky

那么,isinstance()就可以告訴我們,一個對象是否是某種類型。先創建3種類型的對象:

>>> a = Animal()>>> d = Dog()>>> h = Husky()

然后,判斷:

>>> isinstance(h, Husky)True

沒有問題,因為h變量指向的就是Husky對象。

再判斷:

>>> isinstance(h, Dog)True

h雖然自身是Husky類型,但由于Husky是從Dog繼承下來的,所以,h也還是Dog類型。換句話說,isinstance()判斷的是一個對象是否是該類型本身,或者位于該類型的父繼承鏈上。

因此,我們可以確信,h還是Animal類型:

>>> isinstance(h, Animal)True

同理,實際類型是Dog的d也是Animal類型:

>>> isinstance(d, Dog) and isinstance(d, Animal)True

但是,d不是Husky類型:

能用type()判斷的基本類型也可以用isinstance()判斷:

>>> isinstance('a', str)True>>> isinstance(u'a', unicode)True>>> isinstance('a', unicode)False            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 萍乡市| 田阳县| 津南区| 慈溪市| 文山县| 聂拉木县| 邵武市| 博白县| 安塞县| 齐齐哈尔市| 武定县| 元朗区| 虹口区| 治县。| 长宁县| 安义县| 东光县| 华安县| 定结县| 南阳市| 五台县| 东明县| 怀来县| 无棣县| 库尔勒市| 大埔县| 成都市| 邯郸县| 汝州市| 浦北县| 老河口市| 石楼县| 清徐县| 龙胜| 宽城| 长丰县| 周至县| 青冈县| 工布江达县| 永安市| 宜君县|