簡體   English   中英

在Python中模擬類構造函數的默認參數

[英]Mocking class constructor default parameters in Python

有沒有辦法只模擬類構造函數的默認參數? 例如,如果我有這個課:

  class A (object):
      def __init__(self, details='example'):
          self.details = details

有沒有一種方法可以只模擬details參數的默認值,例如到details='test'

一個新的模擬類會做嗎?

class Amock(A):
  def __init__(self, details='newdefault'):
      super(Amock, self).__init__(details=details)

當然這是最簡單的:

  class TestA (A):
      def __init__(self, details='test'):
          super(TestA, self).__init__(details)

如果不更改其他地方的代碼就無法使用TestA ,則可以嘗試一些更直接的方法:

>>> A().details
'example'
>>> A.__old_init = A.__init__
>>> A.__init__ = lambda self, details='test': self.__old_init(details)
>>> A().details
'test'

如果您願意走那么遠,為什么不整潔呢?

class A (object):
    _DEFAULT_DETAILS = 'details'

    def __init__(self, details=None):
        if details is None:
            self.details = self._DEFAULT_DETAILS
        else:
            self.details = details

現在,您可以覆蓋默認值,而無需采取任何欺騙措施:

A._DEFAULT_DETAILS = 'test'

暫無
暫無

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

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