日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python依赖注入_如何做依赖注入python方式?

發布時間:2024/9/27 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python依赖注入_如何做依赖注入python方式? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一切都取決于情況.例如,如果您使用依賴注入來進行測試,所以您可以輕松地嘲笑某些內容 – 您可以經常放棄注入:您可以嘲笑您將注入的模塊或類:

subprocess.Popen = some_mock_Popen

result = subprocess.call(...)

assert some_mock_popen.result == result

subprocess.call()將調用subprocess.Popen(),我們可以模擬它,而不必以特殊的方式注入依賴.我們可以直接替換subprocess.Popen. (這只是一個例子;在現實生活中,你會以更加健壯的方式做到這一點)

如果對更復雜的情況使用依賴注入,或者模擬整個模塊或類不適用(因為例如,您只想嘲弄一個特定的調用),則使用類屬性或模塊全局變量作為依賴項是通常的選擇.例如,考慮到一個my_subprocess.py:

from subprocess import Popen

def my_call(...):

return Popen(...).communicate()

您只能通過分配給my_subprocess.Popen來輕松替換由my_call()創建的Popen調用;它不會影響任何其他調用subprocess.Popen(但它會替換所有調用my_subprocess.Popen,當然).類似地,類屬性:

class MyClass(object):

Popen = staticmethod(subprocess.Popen)

def call(self):

return self.Popen(...).communicate(...)

當使用這樣的類屬性時,考慮到這些選項很少需要,你應該注意使用staticmethod.如果不這樣做,并且您插入的對象是一個正常的函數對象或另一種類型的描述符,就像一個屬性,在從類或實例中檢索到時,會執行一些特殊的描述,它會做錯事.更糟糕的是,如果你現在使用的東西不是一個描述符(比如subprocess.Popen類,在這個例子中),它現在就可以工作,但是如果有問題的對象改變了一個正常的功能,那么它將會令人困惑.

最后,只有簡單的回調;如果您只想將特定實例的類綁定到特定的服務,則可以將服務(或一項或多項服務的方法)傳遞給類初始化程序,并使用它:

class MyClass(object):

def __init__(self, authenticate=None, authorize=None):

if authenticate is None:

authenticate = default_authenticate

if authorize is None:

authorize = default_authorize

self.authenticate = authenticate

self.authorize = authorize

def request(self, user, password, action):

self.authenticate(user, password)

self.authorize(user, action)

self._do_request(action)

...

helper = AuthService(...)

# Pass bound methods to helper.authenticate and helper.authorize to MyClass.

inst = MyClass(authenticate=helper.authenticate, authorize=helper.authorize)

inst.request(...)

當設置這樣的實例屬性時,您不必擔心描述符觸發,所以只需分配函數(或類或其他可調用或實例)即可.

總結

以上是生活随笔為你收集整理的python依赖注入_如何做依赖注入python方式?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。