我正在try 对其他成员函数修饰器重新使用成员函数修饰器,但我收到以下错误:
'function' object has no attribute '_MyClass__check_for_valid_token'
基本上,我有一个有效的修饰器来判断用户是否登录(@LOGIN_REQUIRED
),我想首先在@ADMIN_REQUIRED
修饰器中调用它(所以我的 idea 是判断用户是否使用现有的@LOGIN_REQUIRED
修饰器登录,然后添加一些特定的验证来判断登录的用户是否是@ADMIN_REQUIRED
修饰器中的管理员).
我现在的代码是这样的:
class MyClass:
def LOGIN_REQUIRED(func):
@wraps(func)
def decorated_function(self, *args, **kwargs):
# username and token should be the first parameters
# throws if not logged in
self.__check_for_valid_token(args[0], args[1])
return func(self, *args, **kwargs)
return decorated_function
@LOGIN_REQUIRED
def ADMIN_REQUIRED(func):
@wraps(func)
def decorated_function(self, *args, **kwargs):
is_admin = self.check_if_admin()
if not is_admin:
raise Exception()
return func(self, *args, **kwargs)
return decorated_function
@ADMIN_REQUIRED
def get_administration_data(self, username, token):
# return important_data
# currently throws 'function' object has no attribute '_MyClass__check_for_valid_token'
你知道我怎么才能让它起作用吗?
根据 comments 和答复澄清的约notes项:
- 可以将方法
__check_for_valid_token
的名称更改为不会遇到名称损坏问题.我只是使用了双下划线,因为它是一个应该只能由类本身访问的方法(私有). - "MyClass"中没有继承.
-
@LOGIN_REQUIRED
代码必须在@ADMIN_REQUIRED
代码之前运行(因为这是某些人所期望的,至少在我的例子中是这样).