簡體   English   中英

變量被訪問的Python魔術方法?

[英]Python magic method for variable being accessed?

我正在尋找一個類似於__get__方法的__get__方法,但在我的情況下,變量不在另一個類中,我想要類似的東西:

class A(object):
  def __similar_to_get__(self):
    print 'called'
    return self

a = A()
b = a
>>> 'called'

可能嗎?

我問這個的原因是,我正在使用python模擬庫,假設我正在測試的函數使用URI屬性,我想模擬它以在后續調用中返回不同的值。 例如:

class WebService(obj):
  URI = 'http://works.com'

  def dowork(self):
     call_api(self.URI)

對我來說,模擬失敗我正在使用模擬庫:

 mock = MagicMock()
 mock.side_effect = ['http://fail.com', 'http://works.com']

 with patch('WebService.URI', mock):
     # do the testing

但問題是我只能通過調用可調用的mock()而不僅僅是訪問mock來獲得mock來返回url

PS:我是一個模擬菜鳥。

沒有直接回答我自己的問題,我設法使用一個屬性來解決這個問題:

    from dps.px.pxpost import PxPost
    mock = MagicMock()
    mock.side_effect = ['http://doesnotexist', PxPost.URI]

    def URI(self):
        return mock()

    with patch('django.conf.settings.CELERY_ALWAYS_EAGER', True, create=True):
        with patch('dps.px.pxpost.PxPost.URI', property(URI)):
            self.transaction.process()
            for sub_transaction in self.transaction.sub_transactions.all():
                self.assertTrue(isinstance(sub_transaction.state, CompletedSubTransaction))
                self.assertTrue(sub_transaction.transaction_logs.count() > 0)
            self.assertTrue(isinstance(self.transaction.state, CompletedTransaction))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM