反射機制: 讓物件告訴我們它的相關資訊(物件擁有的屬性和方法, 物件所屬的類, 這個類是否有某個屬性或者方法等等)
1). 物件擁有的屬性和方法dir()
2)判斷物件所屬的類?type( )、isinstance( , )
3). 根據魔術方法來獲取屬性值
4). hasattr, getattr, setattr, delattr獲取屬性值
1). 物件擁有的屬性和方法dir()
示例1:
li = [1,2,3,4]
print(dir(li))
輸出:
示例2:
import random
class turtle(object):
"""烏龜類
"""# 建構函式什麼時候執行? =---*****建立物件時執行
def __init__(self): # self指的是例項化的物件;
# 烏龜的屬性: x,y軸座標和體力值
# 烏龜的x軸, 範圍1,10
self.x = random.randint(1, 10)
self.y = random.randint(1, 10)
# 烏龜初始化體力為100
self.power = 100
# 類的方法:
def move(self):
# 烏龜的最大移動能力為2,[-2, -1, 0, 1, 2]
move_skill = [-2, -1, 0, 1, 2]
# 計算出烏龜的新座標(10, 12)
new_x = self.x + random.choice(move_skill)
new_y = self.y + random.choice(move_skill)
# 對於新座標進行檢驗, 是哦否合法, 如果不合法, 進行處理
self.x = self.is_vaild(new_x)
self.y = self.is_vaild(new_y)
# 烏龜每移動一次,體力消耗1
self.power -= 1
def is_vaild(self, value):
"""判斷傳進來的x軸座標或者y軸座標是否合法?
1). 如果合法, 直接返回傳進來的值;
2). value<=0; *****> abs(value);
3). value > 10 *****=> 10-(value-10);
:param value:
:return:
"""if 1 <= value <= 10:
return value
elif value < 1:
return abs(value)
else:
return 10 - (value - 10)
def eat(self):
"""當烏龜和魚座標重疊,烏龜吃掉魚,烏龜體力增加20
:return:
"""self.power += 20
turtle = turtle()
print(dir(turtle))
輸出:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'eat', 'is_vaild', 'move', 'power', 'x', 'y']
#可以看見turtle的所有屬性和方法
2)判斷物件所屬的類?type( )、isinstance( , )
示例1:
a = [1,2,3,4]
print(type(a))
print(turtle)
輸出:
示例2:
from datetime import date
d = date(2018,1,1)
print(type(d))
輸出:
示例3:
print(isinstance(1,str)) #判斷1是否屬於str類
print(isinstance(turtle,turtle)) #判斷turtle是否屬於turtle類
輸出:
false
true
3). 根據魔術方法來獲取屬性值
print(turtle.__class__) # 所屬類
print(turtle.__dict__) # 屬性和屬性值
print(turtle.__doc__) # 所屬類的文字說明
輸出:
烏龜類
4). hasattr, getattr, setattr, delattr獲取屬性值
print(hasattr(turtle, 'x')) # 判斷turtle物件是否有屬性x,true
print(hasattr(turtle, 'x1'))# 判斷turtle物件是否有屬性x1,false
print(getattr(turtle, 'x')) # 獲得x屬性值2
# print(getattr(turtle, 'x1'))# 不存在該屬性會報錯attributeerror: 'turtle' object has no attribute 'x1'
setattr(turtle, 'x', '100') # 重置屬性值x=100
print(getattr(turtle, 'x'))
delattr(turtle, 'x') # 刪除屬性x
print(hasattr(turtle, 'x'))
輸出:
true
false
2100
false
python反射機制
本文總結python的反射機制,以及其簡單應用 首先要說的是globals 函式 在沒有任何模組匯入的情況下,執行globals函式,函式返回的是乙個包含當前作用域的全域性變數的字典,key是全域性範圍內物件的名字。globals 然後先導入乙個模組 os 在執行globals函式 import o...
python反射機制
反射的本質 反射就是通過字串的形式,匯入模組 通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件 模組 中操作 查詢 獲取 刪除 新增 成員,一種基於字串的事件驅動!下面我們通過反射機制在web路由上的應用來介紹反射 首先我們來看如下 的設計 users.py 模組中 visit模組中...
python反射機制
根據不同的場景執行不同的函式,可以將這種寫入配置中,讀取配置,執行對應的函式,這個時候獲取的函式為字串,如何執行該字串呢?反射就是通過字串的形式,匯入模組 反射就是通過字串的形式,匯入模組 通過字串的形式,去模組尋找指定函式,並執行。利用字串的形式去物件中操作屬性或者函式利用字串的形式去物件中操作屬...