相关疑难解决方法(0)

functools.wraps有什么作用?

对另一个问题的答案的评论中,有人说他们不确定functools.wraps在做什么.所以,我问这个问题,以便在StackOverflow上有一个记录,供将来参考:究竟functools.wraps做了什么?

python decorator functools

588
推荐指数
6
解决办法
12万
查看次数

实例方法的Python装饰器可以访问该类吗?

嗨我有类似下面的东西.基本上我需要从定义中的实例方法使用的装饰器访问实例方法的类.

def decorator(view):
    # do something that requires view's class
    print view.im_class
    return view

class ModelA(object):
    @decorator
    def a_method(self):
        # do some stuff
        pass
Run Code Online (Sandbox Code Playgroud)

代码原样给出

AttributeError: 'function' object has no attribute 'im_class'

我发现类似的问题/答案 - Python装饰器让函数忘记它属于一个类Python装饰器中的Get类 - 但这些依赖于一种解决方法,它通过抢夺第一个参数在运行时抓取实例.在我的情况下,我将基于从其类中收集的信息调用该方法,因此我不能等待来电.

谢谢.

python decorator

99
推荐指数
6
解决办法
5万
查看次数

在Python中,如何获得成员函数类的名称?

我有一个函数,它将另一个函数作为参数.如果函数是类的成员,我需要找到该类的名称.例如

def analyser(testFunc):
    print testFunc.__name__, 'belongs to the class, ...
Run Code Online (Sandbox Code Playgroud)

我想

testFunc.__class__ 
Run Code Online (Sandbox Code Playgroud)

会解决我的问题,但这只是告诉我testFunc是一个函数.

python reflection metaprogramming

12
推荐指数
3
解决办法
2万
查看次数

Python装饰器在它正在装饰的函数之前运行吗?

举个例子,

def get_booking(f=None):
    print "Calling get_booking Decorator"
    def wrapper(request, **kwargs):
        booking = _get_booking_from_session(request)
        if booking == None:
            # we don't have a booking in our session.
            return HttpRedirect('/')
        else:
            return f(request=request, booking=booking, **kwargs)
    return wrapper

@get_booking
def do_stuff(request, booking):
    # do stuff here
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,甚至在我调用我正在装饰的函数之前,就会调用@get_booking装饰器.

开始输出:

Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
[26/Oct/2008 19:54:04] "GET /onlinebooking/?id=1,2 HTTP/1.1" …
Run Code Online (Sandbox Code Playgroud)

python django decorator

9
推荐指数
1
解决办法
6920
查看次数

当装饰器机制是类时,类成员上的Python装饰器会失败

当创建用于类方法的装饰器时,我在装饰器机制是一个类而不是一个函数/闭包时遇到了麻烦.使用类窗体时,我的装饰器不会被视为绑定方法.

通常我更喜欢使用函数表单来装饰器,但在这种情况下,我必须使用现有的类来实现我需要的东西.

这好像它可能与python-decorator-makes-function-forget-it-it-it-a-class有关,但为什么它对函数形式起作用呢?

这是我可以用来表示所有事情的最简单的例子.抱歉,代码数量:

def decorator1(dec_param):
    def decorator(function):
        print 'decorator1 decoratoring:', function
        def wrapper(*args):
            print 'wrapper(%s) dec_param=%s' % (args, dec_param)
            function(*args)
        return wrapper
    return decorator

class WrapperClass(object):
    def __init__(self, function, dec_param):
        print 'WrapperClass.__init__ function=%s dec_param=%s' % (function, dec_param)
        self.function = function
        self.dec_param = dec_param

    def __call__(self, *args):
        print 'WrapperClass.__call__(%s, %s) dec_param=%s' % (self, args, self.dec_param)
        self.function(*args)

def decorator2(dec_param):
    def decorator(function):
        print 'decorator2 decoratoring:', function
        return WrapperClass(function, dec_param)
    return decorator

class Test(object):
    @decorator1(dec_param=123)
    def member1(self, value=1):
        print 'Test.member1(%s, %s)' …
Run Code Online (Sandbox Code Playgroud)

python decorator

7
推荐指数
1
解决办法
1352
查看次数

有没有办法让类继承sphinx的超类文档?

假设我有一堂课

class A(object):
  def myfunction():
    """A."""
    pass
Run Code Online (Sandbox Code Playgroud)

和一个子类

class B(A):
  def myfunction():
    pass
Run Code Online (Sandbox Code Playgroud)

是否可以使用sphinx从A.myfunction继承B.myfunction的API文档?B.myfunction的文档应为"A".同样.

python python-sphinx

4
推荐指数
1
解决办法
1375
查看次数