Python程式設計之 類反射

2021-09-12 04:08:59 字數 2046 閱讀 1429

python中的反射功能是由以下四個內建函式提供:hasattr、getattr、setattr、delattr,該四個函式分別用於對物件內部執行:檢查是否含有某成員、獲取成員、設定成員、刪除成員。

class

foo(

object):

def__init__

(self)

: self.name =

'hongsong'

self.age =

24def

func

(self)

:return

'haha'

obj = foo(

)# #### 檢查是否含有成員 ####

print

(hasattr

(obj,

'name'))

print

(hasattr

(obj,

'func'))

# #### 獲取成員 ####

print

(getattr

(obj,

'name'))

r =getattr

(obj,

'func'

)print

(r)print

(r()

)# #### 設定成員 ####

setattr

(obj,

'age',18

)v =

getattr

(obj,

'age'

)print

(v)# #### 刪除成員 ####

#delattr(obj, 'name')

#delattr(obj, 'func')

輸出:

true

true

hongsong

>>

haha

18

當我們要訪問乙個物件的成員時,應該是這樣操作:

class

foo(

object):

def__init__

(self)

: self.name = 'yy

deffunc

(self)

:return

'func'

obj = foo(

)# 訪問字段

obj.name

# 執行方法

obj.func(

)

a、上述訪問物件成員的 name 和 func 是什麼?

答:是變數名

b、obj.*** 是什麼意思?

答:obj.*** 表示去obj中或類中尋找變數名 ***,並獲取對應記憶體位址中的內容。

使用其他方式獲取obj物件中的name變數指向記憶體中的值 「yy」

方式一:

class

foo(

object):

def__init__

(self)

: self.name =

'yy'

deffunc

(self)

:return

'func'

obj = foo(

)print

(obj.__dict__[

'name'])

#輸出yy

方式二:
class

foo(

object):

def__init__

(self)

: self.name =

'yy'

deffunc

(self)

:return

'func'

obj = foo(

)print

(getattr

(obj,

'name'))

#輸出yy

Scala 物件導向程式設計之類

定義類,包含 field 以及方法 class helloworld def getname name 建立類的物件,並呼叫其方法 val helloworld new helloworld helloworld.sayhello print helloworld.getname 也可以不加括號,如...

C 高階程式設計之「反射」

一,定義 反射技術,能夠讓託管 在執行時檢視元資料以及 的各方面資訊。二,常用方法 1,獲取物件方法 必須以public修飾的方法,不包括建構函式 2,獲取物件屬性 3,獲取物件的父類 附示例 using system using system.collections.generic using s...

C 泛型程式設計之類模板案例

案例描述 實現乙個通用的陣列類。要求如下 1 可以對內建資料型別以及自定義資料型別的資料進行儲存 2 將陣列中的資料儲存到堆區中 3 建構函式中可以傳入陣列的容量 4 提供對應的拷貝建構函式以及operator 防止淺拷貝問題 5 提供尾插法和尾刪法對陣列中的資料進行增加和刪除 6 可以通過下標的方...