Python中文
首页
教程
问答
标签
搜索
登录
注册
调用变量超类方法
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图通过使用变量方法名来调用超类的方法。通常,我认为以下两行代码是等效的:</p> <pre><code>someObj.method() someObj.__getattribute__( 'method' )() </code></pre> <p>事实上,我相信,当我使用第一行时,也会发生这种情况。然而,在下面的例子中,第二行产生了一个奇怪的问题。在</p> <p>我使用<a href="http://docs.python.org/py3k/library/functions.html#super" rel="nofollow">^{<cd1>}</a>构造一个超级对象并调用超类的方法。直接这样做可以像预期的那样工作,但是使用<code>__getattribute__</code>先获取方法,会导致一个不确定的循环,该循环反复调用子类的方法。在</p> <p>参见以下代码:</p> ^{pr2}$ <p>如果运行该代码,则一切都按预期工作,并且您应该得到类似以下内容的输出:</p> <pre><code><bound method B.example of <__main__.B object at 0x01CF6C90>> <bound method B.example of <__main__.B object at 0x01CF6C90>> example in A example in B </code></pre> <p>所以这两种方法,一种是直接访问的,另一种是通过<code>__getattribute__</code>,看起来是一样的。但是,如果将方法调用替换为注释掉的行,则最终将出现递归运行时错误。在</p> <p>为什么会发生这种情况,更重要的是,当我使用工作行时,我如何以python内部相同的方式访问该方法?在</p> <h3>编辑</h3> <p>当我以为我已经试过所有的方法时,我发现这是有效的:</p> <pre><code>super.__getattribute__( super( B, self ), 'example' )() </code></pre> <p>它实际上等于<code>super( B, self ).example</code>。在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>获取<code>B</code>对象的<code>example</code>属性将得到<code>B.example</code>的绑定副本。调用此函数将导致递归错误。您调用的<code>A.__getattribute__()</code>是无关的;您仍然有一个<code>B</code>对象。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
5 回答
尽管python中的表达式为false,但循环仍在运行
8 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
4 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
3 回答
尽管python字典包含了大量的条目,但它并没有增长
2 回答
尽管python说模块存在,为什么我会得到这个消息?
9 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
9 回答
尽管stdout和stderr重定向,但未捕获错误消息
7 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
9 回答
尽管tkinter上的变量已更改,但显示未更改
2 回答
尽管try/except使用Python进行单元测试时出现断言错误
6 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
9 回答
尽管url有效,Pandas仍读取url的\u csv错误
2 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
10 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
5 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
5 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
7 回答
尽管下载了i,但找不到型号“fr”
7 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
5 回答
尽管为所有行指定了权重,网格(0)仍不起作用
3 回答