我有一个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中是否有一种方法可以从方法"调用函数作为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输出