我有一个请求处理程序和一个decorator,我想在decorator中使用self对象
class MyHandler(webapp.RequestHandler):
@myDecorator
def get(self):
#code
更新:请注意第一个自我和第二个自我之间的差异
class myDecorator(object):
def __init__(self, f):
self.f = f
def __call__(self):
#work with self
MyHandler
>;get
(函数)>;self
(参数)myDecorator
>;__call__
(函数)>;self
(参数)上面提到的自我论证是不同的。我的意图是从__call__
函数内部访问第一个自我,或者找到一种类似的方法。
嗨,我可以从装饰器中的get函数访问MyHandlers自变量吗?
更新2:我想实现一个decorator,以便在google应用程序引擎中使用自定义登录:
我有一个类(requestHandler):
class SomeHandler(webapp.RequestHandler):
@only_registered_users
def get(self):
#do stuff here
我想修饰get函数以检查用户是否登录:
from util.sessions import Session
import logging
class only_registered_users(object):
def __init__(self, f):
self.f = f
def __call__(self):
def decorated_get(self):
logging.debug("request object:", self.request)
session = Session()
if hasattr(session, 'user_key'):
return self.f(self)
else:
self.request.redirect("/login")
return decorated_get
如果用户在会话对象中具有“user_key”属性,则我知道该用户是否已登录。
这是我对这个案子感兴趣的主要目标
如果我做错了什么,请告诉我你的建议/意见!
谢谢!
我不完全清楚您想要什么,但是如果您只想使用修饰函数的参数,那么这正是一个基本的修饰器所做的。所以要访问,比如说,
self.request
来自装饰器,您可以执行以下操作:如果您试图访问修饰函数附加到的类,那么它有点棘手,您将不得不使用inspect模块进行一些欺骗。
在上面的示例中,我们从currentframe(在decorator执行期间)获取类的名称,然后将其存储在decorated函数中。在这里,我们只是在将类名称传递给原始的
say
函数之前,将类名称放在msg
变量的前面,但是一旦有了类名称,就可以使用您的想象力来做任何您喜欢的事情。尝试这种方法:Can a Python decorator of an instance method access the class?
不是完全相同的问题,但是您应该能够使用相同的方法创建对self的引用,或者创建对字典的引用,其中包含可以在装饰器中找到的特定类的对象。
相关问题 更多 >
编程相关推荐