[英]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.