繁体   English   中英

在Python动态调用staticmethod

[英]Dynamically call staticmethod in Python

我有一个 python object 有各种属性,其中之一是check=None

class MenuItem:
    check: bool = True

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

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

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

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

到目前为止,一切都很好。 但是由于实例方法的调用隐式地将self添加为第一个参数,我必须将每个 lambda(或外部函数)写为lambda self, request: ... - external functions must be def check_superuser(self, request): ...恕我直言,这看起来很糟糕。

Python 中有没有办法从“as staticmethod”方法调用 function? 喜欢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM