我已经编写了一个python Flask应用程序,它有如下一个类和方法。你知道吗
class PythonSample:
def method1():
pass # does something
def method2():
pass # does something
现在我已经编写了另一个类,它有如下的decorator函数。你知道吗
class PythonAuth:
def oauthAuth():
pass
现在我为PythonSample类的所有方法连接oauthAuth装饰器,如下所示
import oauthAuth from PythonAuth
class PythonSample
@oauthAuth
def method1():
pass # does something
@oauthAuth
def method2():
pass # does something
在每种方法上使用decorator效果都很好。你知道吗
问题:不是将oauthAuth decorator应用于每个方法。有没有一种方法可以在python中进行配置,比如将oauthAuth decorator应用于类中的所有方法并排除某些方法。你知道吗
像include auth for specific url和exclude authentication for specific url之类的东西
请忽略此处python代码的语法。你知道吗
你可以使用一个类装饰加上一些魔术。你知道吗
装饰功能
假设您有一个decorator,它在调用函数之前只记录一个字符串。你知道吗
装饰类
你也可以用同样的技巧,但是要用一个类。
log_all
是类装饰器,cls
是类类型。我们使用vars
遍历类字典,并使用callable(v)
查找方法。用log(v)
修饰方法,并使用setattr
将cls
定义更改为新的修饰方法。就像函数装饰器一样,最终返回类。你知道吗本质上我忽略了
k
,但是k
是方法名,您可以利用它来实现您的使用场景。完整代码
这是一个完整的例子,现在应该有点道理了。你知道吗
类
A
中的每个方法都应该用log
修饰器修饰。你知道吗相关问题 更多 >
编程相关推荐