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 可以通過下標的方...