0x01 場景
最近幾次遇到下面場景:
函式呼叫關係 a->b->c->d->e->f->g
g處需要乙個x資料,但這個x資料只有a處出現過,中間過程由於某種原因難以修改 (比如 中間某一階段程式外其他人員寫的幾百個外掛程式,在模板設立之初就沒有考慮傳遞該資料,改模板意味著要改幾百個外掛程式)
0x02 將資料傳入類本身裡
這裡並不是指類的例項,而是在a截斷就將資料傳入g呼叫的類裡。
每個類相當於乙個模板,在程序開啟的時候,只存乙份在記憶體中。
將資料直接懟到類裡作為乙個屬性,就可以實現在a處跳著直接傳資料給g。
0x03 更簡單通用的方法
0x02中使用的類其實是使用了其可變物件存的是指標的特點。
如此可以另起乙個檔案,用於儲存乙個可變物件,可以是:
佇列字典
類類物件
之後在檔案a處引用並改動 (傳入資料),在g處引用拿出資料就好了。
0x04 例項
__init__.py
my_class.py
my_test_1.py
my_test_2.py
# my_class.py
myconf = "null"
myaaa =
class mycl:
my_param = ""
def __init__(self):
pass
# my_test_1.py
""" 如果在程式開頭設定乙個類的變數,在其他地方能呼叫麼 """
from sqlmap_qps_test.my_test_2 import func_two
from sqlmap_qps_test.my_class import mycl, myaaa
from sqlmap_qps_test.my_class import myconf
import sqlmap_qps_test
mycl.my_param = "1"
mycl()
sqlmap_qps_test.myconf = "2"
func_two()
# my_test_2.py
def func_two():
from sqlmap_qps_test.my_class import mycl
mm = mycl()
print(mm.my_param)
from sqlmap_qps_test.my_class import myconf
print(myconf)
import sqlmap_qps_test
print(sqlmap_qps_test.myconf)
from sqlmap_qps_test.my_class import myaaa
print(myaaa)
執行my_test_1.py結果
null
['3']
第一行 mm.my_param 為 1,被修改
在test_1中,1被傳入作為類的屬性,所以在test_2中,屬性呼叫拿到這個1
第二行 myconf 為null,無改動
在test_1中,修改了 sqlmap_qps_test這個檔案(指標存在)裡的myconf;在test_2中,引入了myconf,直接傳入乙個字串,另外乙個位址,而不是sqlmap_qps_test檔案指向的屬性。
所以之間修改互不影響
第三行 sqlmap_qps_test.myconf.myconf,被修改
在test_1中,修改了 sqlmap_qps_test這個檔案(指標存在)裡的myconf;test_2呼叫拿到了檔案位址指向的myconf
第四行 佇列 myaaa ,被修改
在test_1中,修改了佇列例項;在test_2中,拿到了佇列例項的位址,也拿到了修改後的內容
python中var是什麼變數 Python 變數
1.python的變數是什麼 變數是用來儲存電腦程式中的資訊,唯一的目的是將資料儲存在記憶體中。2.python變數的組成 變數由字母 數字 下劃線組成 變數的第一位不能是數字,可以是字母或下劃線 python中的關鍵字不能作為變數。python中的關鍵字 and as assert break c...
CCF 201709 2 公共鑰匙盒 python
box 鑰匙盒中鑰匙的編號 timeline 時間線 字典型別timeline用以記錄整個鑰匙的借還過程 timeline 借出鑰匙時記錄在timeline中的為鑰匙編號w,還回鑰匙則使用w n。用以區分借和還,因為題幹中要求同一時刻若有借有還則先還後借,負數方便後面排序。若同一時刻存在多次借出鑰匙...
Python學習(9) 高階變數型別 公共方法
python 包含了以下內建函式 函式描述 備註len item 計算容器中元素個數 del item 刪除變數 del 有兩種方式 max item 返回容器中元素最大值 如果是字典,只針對 key 比較 min item 返回容器中元素最小值 如果是字典,只針對 key 比較 cmp item1...