根據不同的例項自動獲取類名和屬性(通用顯示工具)

2021-08-07 17:19:46 字數 2714 閱讀 8597

本文內容純屬自己理解,如有錯誤歡迎指正!

一、特殊類屬性

instance.__class__顯示類的鏈結

instance.__class__.__name__顯示類的名稱

object.__dict__提供物件的屬性字典,是乙個鍵值對

還有個比較重要的內建函式:

getattr(obect,key)獲取』object物件』的』key』屬性

>>> from person import person

>>> bob = person('bob smith')

>>> bob.__class__

'person.person'>

>>> bob.__class__.__name__

'person'

>>> for

keyin bob.__dict__:

print(key,'====',bob.__dict__[key])

name ==== bob smith

job ==== none

pay ==== 0

>>> for

keyin bob.__dict__:

print(key,'====',getattr(bob,key))

name ==== bob smith

job ==== none

pay ==== 0

>>>

二、通用顯示工具的實現

儲存為classtools的模組:

class

attrdisplay:

defgatherattrs

(self):

attrs =

for key in sorted(self.__dict__):

return

','.join(attrs)

#以上內容獲取了最底層類的屬性,感覺應該是這個類的鍵和值

def__str__

(self):

return

'[%s:%s]' % (self.__class__.__name__,self.gatherattrs())#自動獲取類的名稱和該類的屬性。

#就這麼簡單,根據不同的例項自動獲取類名和屬性。

#下邊是測試**,可以忽略了

if __name__ == '__main__':

class

toptest

(attrdisplay):

count = 0

def__init__

(self):

self.attr1 = toptest.count

self.attr2 = toptest.count+1

toptest.count += 2

class

subtest

(toptest):

pass

x,y = toptest(),subtest()

print(x)

print(y)

儲存為person的類,這是乙個類的最終形式

from classtools import attrdisplay #匯入模組中attrdisplay類

class

person

(attrdisplay):

#繼承attrdisplay類

def__init__

(self,name,job=none,pay=0):

self.name = name

self.job = job

self.pay = pay

deflastname

(self):

return self.name.split()[-1]

defgiveraise

(self,percent):

self.pay = int(self.pay*(1+percent))

class

manager

(person):

def__init__

(self,name,pay):

#初始化manager類

person.__init__(self,name,'mgr',pay)#通過繼承person類,目的是自動提供job = 'mgr'

C 根據類名建立類的例項物件

因為我使用這個方法的類都是和abstractscenepagedto處於乙個命名空間以及程式集下的,所以獲取命名空間和程式集的時候,直接使用abstractscenepagedto這個類進行獲取,這樣更準確一些,也不怕專案遷移改名。1 private t createactivityscenepag...

C 利用反射根據類名建立類的例項物件

反射 其實就是利用程式集的元資料資訊。反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間。1 假設你要反射乙個 dll 中的類,並且沒有引用它 即未知的型別 assembly assembly assembly.loadfile 程式集路徑,不能是相對路徑 引導程式...

C 利用反射根據類名建立類的例項物件

1 假設你要反射乙個 dll 中的類,並且沒有引用它 即未知的型別 assembly assembly assembly.loadfile 程式集路徑,不能是相對路徑 引導程式集 exe 或 dll dynamic obj assembly.createinstance 類的完全限定名 即包括命名空...