拿到乙個變數,除了用 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:
用python 來獲取當前電腦及python的資訊
coding utf 8 執行當前指令碼來獲取當前電腦及python的配置資訊。import sys,platform 先看python。a sys.version info print 當前python版本號是.format a a ret 當前作業系統 plat form platform.pl...
python 獲取物件資訊
判斷物件型別,使用type 函式 判斷乙個物件是否是函式 使用types模組中定義的常量 import types type abs types.builtinfunctiontype true type lambda x x types.lambdatype true type x for x i...
python中獲取物件資訊
拿到乙個變數,除了用isinstance 判斷它是否是某種型別的例項外,還有沒有別的方法獲取到更多的資訊呢?例如,已有定義 class person object def init self,name,gender self.name name self.gender gender class st...