gpt4 book ai didi

python-2.7 在对象导入时执行代码

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:39 26 4
gpt4 key购买 nike

我正在尝试制作一个弃用系统,允许代码对普通用户透明地运行,但在开发人员模式下标记弃用的对象。

我遇到的一个问题是,即使我处于开发人员模式,我也可以将已弃用的对象导入另一个模块。这意味着我遗漏了使用已弃用对象的地方。

例如在 module1.py 中:

class MyObject(object):
pass
MyObject = MyObject if not dev_mode() else DeprecatedObject

然后在module2.py中:

from module1 import MyObject

我已经设置了 DeprecatedObject,因此与它的任何交互都会引发 DeprecationWarning - 有什么方法可以让它在导入时出错? IE。即使导入 module2.py 也会引发异常。

我在想像这样的事情:

import warnings

class DeprecatedObject(object):
...
def __onimport__(self):
warnings.warn("deprecated", DeprecationWarning)

最佳答案

模块级 __getattr__ 功能允许模块级名称在导入时进行正确的弃用过程。此功能将出现在 Python 3.7 中,请参阅 PEP 562有关详细信息(由于您已使用 Python 2.7 进行标记,因此它无法帮助您,但我提及它是为了将来的读者受益)。

在 Python 2.7 上,您有两个较差的选项:

  • 在对象 __init__ 中触发弃用警告。
  • 使用Guido's hack导入后用自身的补丁版本替换模块。在模块周围包装代理对象允许您控制名称解析。

关于python-2.7 在对象导入时执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48231794/

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