如何修改静态方法装饰器行为?



我一直在寻找一种方法,我们可以修改python中现有的staticmethod装饰器以添加自定义行为。比如说,每次使用静态方法时,都会调用类中的另一个方法。

我遇到了MongoDB的问题,需要调用一个方法来手动设置集合名称。

以下几点描述了我遇到的问题:

  1. 我做了一个数据库类,它充当pymongo的包装器
  2. 创建了 2 个类,它们使用我创建的数据库类来与MongoDB进行交易
  3. 集合名称作为静态变量
    分配给每个类示例

    • 用户类的集合名称 -> 用户,
    • 测验类的集合名称 ->
    • 测验
  4. 数据库类(包装器(维护了它自己的集合名称static variable,该名称由在它的帮助下进行交易所需的任何类分配。

  5. 问题:每当我首先为Quiz类进行事务时,它都会将集合名称分配给数据库类,但是一旦我与用户类进行交易,就会使用测验类的集合名称。

  6. 我在这些类中使用静态方法进行交易,我想到的解决方案是修改 staticmethod,每次调用静态方法时它都会自动将集合名称重新分配给数据库类。

创建一个调用staticmethod的新装饰器。我认为这会起作用。

def customstatic(fun):
def decorator(*args, **kwargs):
def wrapper():
return fun(*args, **kwargs)
# do custom stuff here
return staticmethod(wrapper)
return decorator

为@blueteeth的答案添加替代方案。

这行得通,但大多数棉绒会抱怨它。

def custom_method(func):
@staticmethod
def static(*args, **kwargs):
# do stuff
func(*args, **kwargs)
return static

最新更新