gpt4 book ai didi

python - 有没有办法在Python中进入类命名空间?

转载 作者:行者123 更新时间:2023-11-28 21:26:14 24 4
gpt4 key购买 nike

我发现自己编写了以下代码:

def dlt(translation):
del translation.strands[translation.active][translation.locus]

我更喜欢这样的东西:

def dlt(translation):
*something*(translation):
del strands[active][locus]

有什么办法可以实现吗?

最佳答案

命名空间只是 Python 对象,您可以将对象(包括属性查找的结果)分配给局部变量名称:

strands = translation.strands
active = translation.active
locus = translation.locus

或者,您必须组装一个修改locals() 的上下文管理器,如this answer 所示。 .

像这样的东西可以做到这一点:

import inspect

class Namespace(object):
def __init__(self, namespaced):
self.namespaced = namespaced

def __enter__(self):
"""store the pre-contextmanager scope"""
ns = globals()
namespaced = self.namespaced.__dict__
# keep track of what we add and what we replace
self.scope_added = namespaced.keys()
self.scope_before = {k: v for k, v in ns.items() if k in self.scope_added}
globals().update(namespaced)
return self

def __exit__(self):
ns = globals()
# remove what we added, then reinstate what we replaced
for name in self.scope_added:
if name in ns:
del ns[name]
ns.update(self.scope_before)

然后像这样使用它:

with Namespace(translation):
del strands[active][locus]

translation.__dict__ 中的所有项目都在 while block 中全局可用。

请注意,这不是线程安全的,并且可能会给任何试图阅读使用它的代码的人带来很多困惑,包括您自己。就个人而言,我不会使用它。

关于python - 有没有办法在Python中进入类命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13312814/

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