在Python中动态调用staticmethod



我有一个python对象,它有各种属性,其中一个是check=None

class MenuItem:
check: bool = True

__init__()过程中,它解析自己的属性并查看它们是否可调用。如果是,它调用该函数,并用函数的结果替换它的实例变量:

def __init__(self):
self.request = ...
if callable(self.check):
self.check = self.check(self.request)

目的是拥有可以用lambda函数替换类属性的子类:

class MainMenuItem(MenuItem):
check = lambda request: request.user.is_authenticated

到目前为止,一切顺利。但是,作为实例方法的调用隐式地将self添加为第一个参数,我将不得不将每个lambda(或外部函数)写成lambda self, request: ...-外部函数必须是def check_superuser(self, request): ...-这在我看来很糟糕。

在Python中是否有一种方法可以从方法&quot调用函数作为staticmethod"?像

if callable(self.check):
self.check = staticmethod(self.check)(self.request)

(这显然是行不通的)

欢迎任何提示。我完全想错了吗?

这是你要找的吗?

class A:
check: bool = True
def __init__(self):
self.request = 'request'
if callable(self.check):
self.check = self.__class__.check(self.request)
class B(A):
check = lambda request: len(request)
b = B()
print(b.check)

7输出

相关内容

  • 没有找到相关文章

最新更新