1
19
A while ago, Guido declared that all special method lookups on
new-style classes bypass
最近,一些历史特征又出现了,模块
在Python3.7+中,您只需使用一种明显的方法。要自定义模块上的属性访问,请定义
这也将允许钩住“from”导入,即可以为语句返回动态生成的对象,例如
在相关注释中,除了模块getattr,您还可以定义
|
2
105
这里有两个基本问题:
(1)表示任何解决方案也必须跟踪正在检查的模块,否则 每一个 然后,模块将具有实例替换行为;(2)意味着(1)甚至不可能…至少不是直接的。
幸运的是,sys.modules并不挑剔要做什么,所以包装器可以工作,但只用于模块访问(即
更新 从 Guido van Rossum :
因此,实现您想要的目标的既定方法是在模块中创建一个类,并作为模块替换的最后一个操作
请注意,如果使用此功能,模块中的任何其他功能(如全局函数、其他函数等)将在
|
3
44
这是一个黑客,但您可以用类包装模块:
|
4
18
我们通常不会那样做。 我们要做的就是这个。
为什么?使隐式全局实例可见。
例如,请看
|
5
13
类似于@h_?vard的提议,在这种情况下,我需要在模块上实现一些魔力(例如
查看主
|
6
7
这有点陈词滥调,但是…
这是通过迭代全局命名空间中的所有对象来实现的。如果该项是一个类,它将迭代类属性。如果属性是可调用的,它会将其作为函数添加到全局命名空间中。 它忽略所有包含“uuuu”的属性。 我不会在生产代码中使用它,但它应该可以让您开始使用。 |
7
4
以下是我自己谦虚的贡献,@h vard高度评价的答案稍加润色,但更明确一点(因此@s.lott可能可以接受,尽管这可能不足以满足OP的要求):
|
8
-2
创建包含类的模块文件。导入模块。跑
这是你的模块
在另一个模块中:
动态执行此操作:
|
9
-2
在某些情况下
|