问题:如何从注入的方法引用decorator中创建的对象/变量?

时间:2011-06-30 17:37:22

标签: python reference decorator

我遇到了在装饰器中创建的对象的可用性问题,并且在test_case方法中需要。我的代码如下:

def execute_results_navigation(test_case):
    def wrapper(self,*args,**kwargs):
        result=Result()
        pagination=Pagination()
        results_page_index=1
        while results_page_index<=pagination.get_pages_number():

            for results_object_index in range(results.get_objects_number_per_single_page()):
                test_case(self,*args,**kwargs)

                pagination.set_active_page_number(results_page_index)
            results_page_index+=1

    return wrapper

代替test_case方法“注入”以下代码(所有内容都使用预定义的装饰器进行):

@execute_results_navigation
def test_check_availability_of_search_results(self):
    """
    test case 2.22
    """
    offer=Offer()

    result.select_hotel(results_caller["button"],results_object_index)
    offer_price=offer.get_offer_object_details().price
    offer.verify_offer_availability(offer_price)
    offer.back_to_search_results()

test_case方法无法访问resultpagination个对象和results_object_index变量。调用装饰器时已初始化所有对象。也许我对这个方法做错了,但我认为这些实例存在于wrapper方法中,对它们的访问不应该导致问题。

1 个答案:

答案 0 :(得分:3)

您将无法访问test_case中包装器中定义的局部变量。

看起来test_check_availability_of_search_results是一个实例方法,因此解决问题的一种方法是将这些变量分配给'self'属性。