python - 在 Python 中延迟包含关键字 self 的评估
问题描述
作为后续问题
我想延迟包含self
Python 中的关键字的评估。
最小工作示例:
class TestClass:
def __init__(self, variable_0):
self.__variable_0 = variable_0
def get_variable_0(self):
return self.__variable_0
def test_delayed_evaluation(self, delayed_evaluation):
print(delayed_evaluation)
delayed_evaluation_0 = lambda: self.get_variable_0()
test_class = TestClass(3)
test_class.test_delayed_evaluation(delayed_evaluation_0) # Returns <function <lambda> at 0x0000024E49DE66A8>.
test_class.test_delayed_evaluation(delayed_evaluation_0()) # Returns NameError: name 'self' is not defined.
self
我知道当我替换为时这段代码有效test_class
,但是在我正在处理的项目中的(其他)代码中,类实例不是明确知道的,所以我不能使用这种方法。
为什么 Python 不识别self
?
解决方案
我不知道您到底要达到什么目的(即使阅读上一个问题);有一个更好的用例会很好。
为什么 Python 不识别
self
?
因为它在被调用的那一刻没有定义;对于您的代码,您可以有效地使其与
delayed_evaluation_0 = lambda self: self.get_variable_0()
test_class.test_delayed_evaluation(delayed_evaluation_0(test_class))
我想你想要做的是这样的:
class TestClass:
def __init__(self, variable_0):
self.__variable_0 = variable_0
def get_variable_0(self):
return self.__variable_0
def test_delayed_evaluation(self, delayed_evaluation):
return getattr(self, delayed_evaluation)()
def test_delayed_evaluation_with_parameters(self, delayed_evaluation, *args, **kwargs):
lazy_func = getattr(self, delayed_evaluation)
return lazy_func(*args, **kwargs)
test_case = TestClass(3)
test_case.test_delayed_evaluation('get_variable_0')
您可能还想functools.partial
补充一些用例的知识,这些用例会比用lambda
.
推荐阅读
- c - 用于比较 C 中数字的类似 strcmp 的接口
- html - 如果文本长于 20 个字符,则在数据表列中显示更多/更少选项
- python - 作为可选参数的函数 python
- swift - SwiftUI 导航标题重叠
- java - 在 java 中使用 mailGun API 将 InputStreamSource 作为附件发送
- mongodb - 如何在 mongodb 的内部字段上按升序排序?
- amazon-web-services - 无法通过在 AWS EC2 实例上运行的 docker 访问 Jupyter 笔记本
- excel - 将文件夹中的多个工作簿合并到一个文件中,每个工作簿作为单独的工作表,文件名=工作表名 - Excel VBA 宏
- python - 尝试使用 selenium python 在网页中添加多个值
- activemq-artemis - 仅使用命令行创建 ActiveMQ Artemis 代理