Python之路 特別篇 Python反射

2022-07-18 16:06:26 字數 2186 閱讀 6538

說反射之前先介紹一下__import__方法,這個和import匯入模組的另一種方式

1.  import commons

2. __import__('commons')

如果是多層匯入:

1. from list.text import commons 

2. __import__(' list.text.commons',fromlist=true) #如果不加上fromlist=true,只會匯入list目錄

例項:

# lib  - commons.py

name = 'maria'

def f1():

return "f1"

def f2():

return "f2"

def f3():

return "f3"

****************************

# index.py

moudle = __import__('lib.commons',fromlist=true)

ret = moudle.f1()

print(ret)

# f1

反射即想到4個內建函式分別為:getattr、hasattr、setattr、delattr  獲取成員、檢查成員、設定成員、刪除成員下面逐一介紹先看例子:

moudle = __import__('lib.commons',fromlist=true)

# 獲取成員

ret = getattr(moudle,'f1',none) # 可以設定預設值,沒找到時 ret = none

print(ret)

# # 獲取全域性變數:

ret = getattr(dd,"name",none)

# 檢查成員

ret = hasattr(moudle,'f11') # 因為有f1方法所以返回true

print(ret)

# 設定成員

setattr(moudle,"age",18) # 記憶體中建立了乙個全域性變數

ret = getattr(moudle,'age',none)

print(ret)

setattr(moudle,"add",lambda a: a +1 ) # 記憶體中建立了乙個函式

ret = getattr(moudle,'add',none)

print(ret(100))

# 刪除成員

delattr(moudle,'f3')

ret = hasattr(moudle,'f3')

print(ret)

對於反射小節:

反射:

# 根據字串的形式去某個模組中尋找東西

# 根據字串的形式去某個模組中判斷東西是否存在

# 根據字串的形式去某個模組中設定東西

# 根據字串的形式去某個模組中刪除東西

# 根據字串的形式去物件 (某個模組) 中操作成員

結論:1.根據字串的形式匯入模組。

2.根據字串的形式去物件(某個模組)中操作其成員

實現思路:規定使用者輸入格式 模組名/函式名 通過__import__的形式匯入模組並通過 hasattr和getattr 檢查並獲取函式返回值。

# lib - commons.py

def login():

return 'login'

def logout():

return 'logout'

********************************

# index.py

target_url = input('請輸入url:')

target_module,target_func =target_url.split('/')

moudle = __import__('lib.'+target_module,fromlist=true)

if hasattr(moudle,target_func) == true:

func = getattr(moudle,target_func)

ret = func()

print(ret)

else :

print('404 not found!')

Python之路 特別篇 Python切片

切片操作符是序列名後跟乙個方括號,方括號中有一對可選的數字,並用冒號分割。注意 數是可選的,而冒號是必須的。consequence start end step 切片操作符中的第乙個數 冒號之前 表示切片開始的位置,第二個數 冒號之後 表示切片到 結束,第三個數 冒號之後 表示切片間隔數。如果不指定...

python 協程之特別篇

python通過yield提供了對協程的基本支援,但是不完全。而第三方的gevent為python提供了比較完善的協程支援。gevent是第三方庫,通過greenlet實現協程,其基本思想是 當乙個greenlet遇到io操作時,比如訪問網路,就自動切換到其他的greenlet,等到io操作完成,再...

小猿日記(5) 520特別篇

今天就不聊啥工作,啥日常了。工作 敲鍵盤 日常 睡大覺 健身 早上吃大豆包子,喝著紅豆鮮奶。手敲鍵盤,眼觀螢幕,心繫佳人。遇見了你 星星開始閃爍 陽光也是橙子的芬香 微風輕撫 想象是與你遊覽春光 聽自然的妙不可言 徜徉於原野之間嬉笑 因為是你 我看見了未來 那是在你眼中 我才看見了自己的美麗 無聲無...