您现在的位置是:主页 > news > 在信息发布网站建设外链/营销传播
在信息发布网站建设外链/营销传播
admin2025/5/7 13:48:28【news】
简介在信息发布网站建设外链,营销传播,网站建设费用明细报告,宁德网页设计我正在写一个中等大小(一些KLOC)PyQt应用程序.我开始用漂亮的模块编写它以便于理解,但我正在研究Python命名空间的规则.在几个点上,重要的是仅将类的一个对象实例化为其他代码的资源.例如:表示Aspell作为子进程附加的对象,提供check(word)方法.另一个例子࿱…
我正在写一个中等大小(一些KLOC)PyQt应用程序.我开始用漂亮的模块编写它以便于理解,但我正在研究Python命名空间的规则.在几个点上,重要的是仅将类的一个对象实例化为其他代码的资源.
例如:表示Aspell作为子进程附加的对象,提供check(word)方法.另一个例子:该应用程序具有单个QTextEdit,而其他代码需要调用此单个对象的方法,例如“如果theEditWidget.document().isEmpty()…”
无论我在哪里实例化这样的对象,它都只能从该模块中的代码中引用而不能从其中引用.所以例如除非在同一模块中创建Aspell对象,否则编辑窗口小部件的代码无法调用Aspell网关对象.很好,除了其他模块也需要它.
在this question中提供了bunch类,但在我看来,一堆具有完全相同的问题:它是一个唯一的对象,只能在创建它的模块中使用.还是我完全错过了这里的船?
好的在其他地方建议,这似乎是我的问题的简单答案.我刚刚测试了以下内容:
junk_main.py:
import junk_A
singularResource = junk_A.thing()
import junk_B
junk_B.handle = singularResource
print junk_B.look()
junk_A.py:
class thing():
def __init__(self):
self.member = 99
junk_B.py:
def look():
return handle.member
当我运行junk_main时,它打印99.所以主代码可以通过赋值将名称注入模块.我想到的原因这是一个坏主意.
解决方法:
事实证明答案比我想象的要简单.正如我在问题中提到的,主模块可以为导入的模块添加名称.任何代码都可以将成员添加到对象中.因此,创建模块间通信区域的简单方法是在main中创建一个非常基本的对象,例如IMC(用于模块间通信器),并将其作为成员分配给其他模块应该可用的任何内容:
IMC.special = A.thingy()
IMC.important_global_constant = 0x0001
导入任何模块后,只需为其分配IMC:
import B
B.IMC = IMC
现在,从软件设计的角度来看,这可能不是最好的想法.如果你只是将IMC限制为保持命名常量,它就像一个C头文件.如果只是为了访问单一资源,它就像一个链接外部.但由于Python的自由规则,任何模块中的代码都可以修改或添加IMC成员.以无纪律的方式使用,“谁改变了”可能是一个调试问题.如果有多个过程,竞争条件是危险的.
标签:python,namespaces,pyqt