Tôi đang sử dụng trang trí:Làm thế nào để sử dụng doctest với một chức năng trang trí trong python?
class Memoized(object):
__cache = {}
def __init__(self, func):
self.func = func
key = (func.__module__, func.__name__)
# print key
if key not in self.__cache:
self.__cache[key] = {}
self.mycache = self.__cache[key]
def __call__(self, *args):
try:
return self.mycache[args]
except KeyError:
value = self.func(*args)
self.mycache[args] = value
return value
except TypeError:
return self.func(*args)
def __get__(self, obj, objtype):
return functools.partial(self.__call__, obj)
def reset(self):
for v in self.__cache.itervalues():
v.clear()
và một chức năng:
@Memoized
def is_tile_inside_border(x, y, z, border):
'''Checks if a tile is inside border or not
>>> is_tile_inside_border(85,53,7,'iran')
3
>>> is_tile_inside_border(85,15,7,'iran')
0
'''
binary_data = get_border_binary(border, z)
return isInside((x, y), binary_data)
Nhưng khi sử dụng mô-đun doctest (python mycode.py -v):
if __name__ == '__main__':
import doctest
doctest.testmod()
Python có thể' t tìm thấy bài kiểm tra trong doc-string. Tôi biết đó là một vấn đề với trang trí. Nhưng làm thế nào tôi có thể sửa nó?
PS: functools.update_wrapper(self, func)
không hoạt động!
Bạn đã thử 'functools.wraps' trang trí? http://stackoverflow.com/questions/308999/what-does-functools-wraps-do –
[vé liên quan] (http://bugs.python.org/issue1108) – shx2
@AndrewGorcester tôi học liên kết, cảm ơn bạn. Nhưng tôi đang làm thế nào tôi có thể sử dụng * kết thúc tốt đẹp * trong một lớp trang trí? – Farsheed