在Python中模拟类构造函数的默认参数

时间:2016-04-18 20:59:17

标签: python testing

有没有办法只模拟类构造函数的默认参数?例如,如果我有这个类:

HWND

有没有办法让模拟只是 class A (object): def __init__(self, details='example'): self.details = details 参数的默认值,例如details

2 个答案:

答案 0 :(得分:2)

新的模拟课会吗?

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

答案 1 :(得分:1)

当然这是最简单的:

  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'