2013-11-01 49 views
0

嘿,我有一个方法定义如下:方法的参数没有被传递到装饰机

from x.y import util 
class my_Class(some_object): 
    @util.myDecorator 
    def foo(self, log_file): 
    ''' 
    Test that search entered into the search bar is the search being 
    executed in the job. 
    ''' 
    self.some_page.open() 
    textarea = self.some_page.searchbar 

    searchbar.run_search(log_file.search_string) 
    self.browser.capture_screenshot() 
    self.some_page.jobstatus.wait_for_job_complete() 

    self.verify_equals(
     self.some_page.jobstatus.event_count, 
     log_file.event_count, 
     "Event count doesn't seem to be right.") 

装饰是在文件util.py

def mydecorator(func): 
    def timeit(*args, **kwargs): 
     start_time = time.time() 
     ret=func(*args, **kwargs) 
     end_time = time.time() 
     print end_time - start_time 
     return ret 
    return timeit 

当我尝试执行代码,它在ret=func(*args, **kwargs)失败,该错误消息

TypeError: foo() takes exactly 2 arguments (1 given)

  • 我打印* args来的内容(与','.join(str(each) for each in args)),看看它包含的,它打印出来

<....my_Class object at ...>

装饰工作正常,只有一个ARG(个体经营)方法。我在这里错过了什么吗?

+0

你怎么调用'foo'方法? my_Class()。FOO()? – alko

+0

你是怎么调用'foo()'的?这工作:'my_Class()。foo(123)'。这不是:'my_Class()。foo()'。 –

+0

am使用py.test调用方法foo 'py.test -k foo file_name.py' – jeev

回答

0

Whiele你回答意见,要知道,它的工作原理:

>>> import time 
>>> 
>>> def mydecorator(func): 
...  def timeit(*args, **kwargs): 
...   start_time = time.time() 
...   ret=func(*args, **kwargs) 
...   end_time = time.time() 
...   print end_time - start_time 
...   return ret 
...  return timeit 
... 
>>> class my_Class(object): 
...  @mydecorator 
...  def foo(self, arg_1): 
...   print arg_1 
... 
>>> my_Class().foo(100) 
100 
0.0 
+0

这也适用于我。但是,正如在上面的评论中提到的,我试图用py.test调用这个方法foo(即一个测试) 'py.test -k foo file_name.py' – jeev

+0

但是你认为pytest会有什么'arg_1'传递给富? – alko

+0

它是一个日志文件。当我不使用装饰器时,日志文件传递时没有任何打嗝。我试着在多个其他测试中使用这个装饰器,并使用超过1个参数。我收到了同样的错误。 – jeev