python中獲取物件資訊

2021-07-24 11:50:54 字數 2734 閱讀 4430

拿到乙個變數,除了用isinstance()判斷它是否是某種型別的例項外,還有沒有別的方法獲取到更多的資訊呢?

例如,已有定義:

class person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

class student(person):

def __init__(self, name, gender, score):

super(student, self).__init__(name, gender)

self.score = score

def whoami(self):

return 'i am a student, my name is %s' % self.name

首先可以用type()函式獲取變數的型別,它返回乙個type物件:

>>> type(123)

>>> s = student('bob', 'male', 88)

>>> type(s)

其次,可以用dir()函式獲取變數的所有屬性:

>>> dir(123)   # 整數也有很多屬性...

['__abs__', '__add__', '__and__', '__class__', '__cmp__', ...]

>>> dir(s)

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'gender', 'name', 'score', 'whoami']

對於例項變數,dir()返回所有例項屬性,包括`__class__`這類有特殊意義的屬性。注意到方法`whoami`也是s的乙個屬性。

如何去掉`__***__`這類的特殊屬性,只保留我們自己定義的屬性?回顧一下filter()函式的用法。

dir()返回的屬性是字串列表,如果已知乙個屬性名稱,要獲取或者設定物件的屬性,就需要用getattr()setattr( )函式了:

>>> getattr(s, 'name') # 獲取name屬性

'bob'

>>> setattr(s, 'name', 'adam') # 設定新的name屬性

>>> s.name

'adam'

>>> getattr(s, 'age') # 獲取age屬性,但是屬性不存在,報錯:

traceback (most recent call last):

file "", line 1, in attributeerror: 'student' object has no attribute 'age'

>>> getattr(s, 'age', 20) # 獲取age屬性,如果屬性不存在,就返回預設值20:

20

對於person類的定義:

class person(object):

def __init__(self, name, gender):

self.name = name

self.gender = gender

希望除了 name和gender 外,可以提供任意額外的關鍵字引數,並繫結到例項,請修改 person 的 __init__()定 義,完成該功能。

?不會了怎麼辦

傳入**kw即可傳入任意數量的引數,並通過setattr()繫結屬性。

參考**:

class person(object):

def __init__(self, name, gender, **kw):

self.name = name

self.gender = gender

for k, v in kw.iteritems():

setattr(self, k, v)

p = person('bob', 'male', age=18, course='python')

print p.age

print p.course

for k, v in kw.iteritems():

setattr(self, k, v)

**kw是關鍵字引數,用於字典

iteritems()用於字典kw的遍歷

setattr(self, k, v)就等價於self.k = v

綜上就是,遍歷dict kw 中的屬性,給每個屬性設定了屬性值

python 獲取物件資訊

判斷物件型別,使用type 函式 判斷乙個物件是否是函式 使用types模組中定義的常量 import types type abs types.builtinfunctiontype true type lambda x x types.lambdatype true type x for x i...

筆記 python獲取物件資訊

拿到乙個物件的引用時,如何知道這個物件是什麼型別 有哪些方法?目錄 type isinstance dir type 函式返回對應的class型別。判斷乙個物件是否是函式用types模組中的各種型別作對比。import types def fn pass type fn types.function...

Python基礎(獲取物件資訊)

import types print type abc str true print type 123 int true deff1 pass print type f1 types.functiontype true print type abs types.builtinfunctiontype...