2012-05-20 42 views
4

我們已經制作了一個大量使用numpy的MaskedArrays庫(帶有繼承)。但我想運行獅身人面像的make doctest而不測試從numpy繼承的方法,因爲它們造成了大約100次失敗。阻止獅身人面像執行繼承的文檔測試

這lookls這樣的:

class _frommethod: 
    """ 
    Adapted from numpy.ma._frommethod 
    """ 

    def __init__(self, func_name): 
     self.__name__ = func_name 
     self.__doc__ = getattr(MaskedArray, func_name).__doc__ 
     self.obj = None 

    def __get__(self, obj, objtype=None): 
     self.obj = obj 
     return self 

    def __call__(self, a, *args, **params): 
     # Get the method from the array (if possible) 
     method_name = self.__name__ 
     method = getattr(a, method_name, None) 
     if method is not None: 
      return method(*args, **params) 
     # Still here ? Then a is not a MaskedArray 
     method = getattr(MaskedTimeData, method_name, None) 
     if method is not None: 
      return method(MaskedTimeData(a), *args, **params) 
     # Still here ? OK, let's call the corresponding np function 
     method = getattr(np, method_name) 

而現在,我們的圖書館還支持numpy的的功​​能,因此我們使用:

min = _frommethod('min') 
max = _frommethod('max') 
... 

如果我禁用self.__doc__ = getattr(MaskedArray, func_name).__doc__make doctest的故障消失。但我想保留繼承的文檔;這樣用戶仍然可以在ipython中使用mylibrary.min?

任何想法如何防止獅身人面像執行此「繼承」doctests?

+1

此功能(您的解決方案)去哪裏?它是獅身人面像的延伸?也許我也想用它。順便說一下,您應該將解決方案作爲答案發布,並將其標記爲已解決,因爲它對您有用。 – bmu

+0

@bmu:我做了一個完整的答案,並添加了一個更完整的例子! (順便說一下:你已經觀看了截屏視頻?:)) – Themerius

回答

2

我現在已經使用此解決方案:

​​

也許有人有一個聰明的方法!