gpt4 book ai didi

python - 动态地将方法添加到类 _without_ 在 python 中公开方法

转载 作者:行者123 更新时间:2023-12-04 07:22:45 25 4
gpt4 key购买 nike

我有一个库,出于各种原因,我想分块构建(主要是为了我可以记录它们,处理它们并在笔记本中独立测试它们)。
假设我有一个所有者类 Parse - 我想向它添加一堆静态方法。
此代码有效:


def _internal_parse_one_of( *list_of_possible_matches ):
parsers = as_parsers( list_of_possible_matches )
if len(parsers) == 0:
raise Exception("no parsers were provided")
the_whole_expression = None
for parser in parsers:
the_whole_expression = parser if the_whole_expression is None else the_whole_expression.or_else( parser )
return the_whole_expression

Parse.one_of = _internal_parse_one_of

Parse.one_of( "x", "y", "z").test_pass("xavier", "x")
Parse.one_of( "x", "y", "z").test_pass("yellow", "y")
Parse.one_of( "x", "y", "z").test_pass("zebra", "z")
Parse.one_of( "x", "y", "z", Parse.any_char).test_pass("abracadabra", "a")
但它会将这个“_internal_parse_one_of”定义泄露到全局命名空间中。有没有什么方法可以在不泄漏任何东西的情况下实现相同的目标?

最佳答案

所以我的第一个粗略的答案是定义辅助函数,将其设置为 Parse 的属性,然后删除原始引用。

class Test:
def __init__(self):
pass

def my_func():
print('yay')

Test.my_method = my_func
del my_func


Test.my_method()

try:
my_func()
except NameError:
print('We don’t pollute on Stackoverflow')

关于python - 动态地将方法添加到类 _without_ 在 python 中公开方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68390241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com