<legend id='xzrvL'><style id='xzrvL'><dir id='xzrvL'><q id='xzrvL'></q></dir></style></legend>
      <tfoot id='xzrvL'></tfoot>
      <i id='xzrvL'><tr id='xzrvL'><dt id='xzrvL'><q id='xzrvL'><span id='xzrvL'><b id='xzrvL'><form id='xzrvL'><ins id='xzrvL'></ins><ul id='xzrvL'></ul><sub id='xzrvL'></sub></form><legend id='xzrvL'></legend><bdo id='xzrvL'><pre id='xzrvL'><center id='xzrvL'></center></pre></bdo></b><th id='xzrvL'></th></span></q></dt></tr></i><div id='xzrvL'><tfoot id='xzrvL'></tfoot><dl id='xzrvL'><fieldset id='xzrvL'></fieldset></dl></div>

        <bdo id='xzrvL'></bdo><ul id='xzrvL'></ul>

        <small id='xzrvL'></small><noframes id='xzrvL'>

      1. 访问全局变量时的模块&#39;s__setattr__和__getattr__

        时间:2024-04-20
        <i id='tEdxc'><tr id='tEdxc'><dt id='tEdxc'><q id='tEdxc'><span id='tEdxc'><b id='tEdxc'><form id='tEdxc'><ins id='tEdxc'></ins><ul id='tEdxc'></ul><sub id='tEdxc'></sub></form><legend id='tEdxc'></legend><bdo id='tEdxc'><pre id='tEdxc'><center id='tEdxc'></center></pre></bdo></b><th id='tEdxc'></th></span></q></dt></tr></i><div id='tEdxc'><tfoot id='tEdxc'></tfoot><dl id='tEdxc'><fieldset id='tEdxc'></fieldset></dl></div>

      2. <legend id='tEdxc'><style id='tEdxc'><dir id='tEdxc'><q id='tEdxc'></q></dir></style></legend><tfoot id='tEdxc'></tfoot>
          <bdo id='tEdxc'></bdo><ul id='tEdxc'></ul>

                <tbody id='tEdxc'></tbody>
              • <small id='tEdxc'></small><noframes id='tEdxc'>

                1. 本文介绍了访问全局变量时的模块&#39;s__setattr__和__getattr__的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  __getattr____setattr__在我使用点符号获取或设置对象的属性时工作得很好。 如何从模块内部截取获取和设置模块全局变量?

                  i子类模块类型:

                  from types import ModuleType
                  class WUserModule(ModuleType):
                      def __init__(self, name):
                          super().__init__(name)
                  
                      def __setattr__(self, name, value):
                          if name in self.__dict__:
                               super().__setattr__(name, value)
                               return
                          print('Set name {}, value {}'.format(name, str(value)))
                  
                      def __getattr__(self, name):
                          print('Get name {}'.format(name))
                  

                  创建空模块并将代码加载到其中:

                  module = WUserModule('form_module')
                  with open('user_module.py', 'r', encoding='utf8') as f:
                      exec(f.read(), module.__dict__)
                  

                  user_module.py加载的代码:

                  a=1
                  print(a)
                  
                  我需要以某种方式拦截对变量a的访问。在加载的代码中,预期可以访问模块globals()中不存在的某些变量,而我希望替身请求的值。

                  更新:

                  上面的代码不能按我需要的方式工作:print没有反映对变量a的访问。

                  我正在使用PyQt4编写一个"平台",其他用户(程序员)在其中添加处理与这些表单交互的表单和模块。表单本身可以通过"Injected"变量form在用户模块中访问。我想让用户能够从表单小部件和一种更简单的方式访问值。我不想编写if form.myCheckbox.isChecked()form.myCheckbox.setChecked(myValue),而是希望提供快捷方式:if myCheckboxmyCheckbox = myValue,截取值访问并在后台执行所需的工作:

                  def __getattr__(self, name):
                      formWidget = getatttr(form, name)
                      if isinstance(formWidget, QLineEdit):
                          formWidget.setText(value)
                  ...
                  

                  推荐答案

                  您不能。

                  基本问题是,属性重载仅在您访问属性时才起作用,具体地说,这意味着:

                  expr . ident
                  

                  没有点,就不可能有属性重载。因此,无论您做什么,类似

                  的序列
                  a
                  

                  永远不能调用属性重载,无论其他什么可能等同于a的值

                  这篇关于访问全局变量时的模块&#39;s__setattr__和__getattr__的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:&quot;filename.whl不是此平台上支持的轮子(&quot; 下一篇:将当前用户置于视图中

                  相关文章

                2. <tfoot id='jyCxg'></tfoot>

                      <i id='jyCxg'><tr id='jyCxg'><dt id='jyCxg'><q id='jyCxg'><span id='jyCxg'><b id='jyCxg'><form id='jyCxg'><ins id='jyCxg'></ins><ul id='jyCxg'></ul><sub id='jyCxg'></sub></form><legend id='jyCxg'></legend><bdo id='jyCxg'><pre id='jyCxg'><center id='jyCxg'></center></pre></bdo></b><th id='jyCxg'></th></span></q></dt></tr></i><div id='jyCxg'><tfoot id='jyCxg'></tfoot><dl id='jyCxg'><fieldset id='jyCxg'></fieldset></dl></div>

                        <bdo id='jyCxg'></bdo><ul id='jyCxg'></ul>

                      <legend id='jyCxg'><style id='jyCxg'><dir id='jyCxg'><q id='jyCxg'></q></dir></style></legend>

                      <small id='jyCxg'></small><noframes id='jyCxg'>