2013-03-11 9 views
5

私は、次のコードを持っている:私は@propertyデコレータを削除するか、私は.toAscii呼び出しを削除し、それが動作する場合プロパティデコレータに「オブジェクトに属性がありません」と表示されるのはなぜですか?

[email protected]:$ python property.py 
2.7.3 (default, Aug 1 2012, 05:14:39) 
[GCC 4.6.3] Linux-3.2.0-38-generic-x86_64-with-Ubuntu-12.04-precise 
html attribute? ['html'] 
Traceback (most recent call last): 
    File "property.py", line 18, in <module> 
    print page.html 
AttributeError: 'Render' object has no attribute 'html' 

import sys 
import platform 
from PyQt4.QtGui import QApplication 
from PyQt4.QtWebKit import QWebPage 

class Render(QWebPage): 
    def __init__(self): 
     self.app = QApplication([]) 
     QWebPage.__init__(self) 

    @property 
    def html(self): 
     return self.mainFrame().toHtml.toAscii() 

page = Render() 
print sys.version, platform.platform() 
print 'html attribute?', [p for p in dir(page) if 'html' in p] 
print page.html 

は、この例外の出力を提供します。しかし、なぜこのエラーは、dir(page)にそれが表示されても何の属性もないと言いますか?

+0

*別名:おそらく '.toHtml()。toAscii()'を意味します。カッコがないことに注意してください。 –

+0

プロパティは 'object'の子孫であるPythonオブジェクトでのみ利用可能です – dawg

+0

あなたは正しい@Robᵩです! ...あなたはそれを答えとして提出する必要があります。 –

答えて

5

ここでの問題は、Pythonがという誤解を招くエラーメッセージを出したことです。 1、この場合に期待されるエラーメッセージはこれです:

AttributeError: 'function' object has no attribute 'toAscii' 

しかし、その代わりに、Pythonは誤解を招くようなエラーメッセージました:

AttributeError: 'Render' object has no attribute 'html' 

プロパティ関数が提示されたAttributeErrorが内を生成し、ありますプロパティ自体の場合はAttributeErrorのようになります。

この奇妙な動作は、@propertyのクラスがQObjectから派生した場合に発生します。これはPyQtの既知の問題です。実際、PyQtのメンテナーは、それが期待される動作であると主張しています(誤って、IMHO)。詳細はthis threadを参照してください。 (そのスレッドでは、QObjectはPythonの組み込みのobjectクラスと同じように動作すると主張されていますが、私自身のテストではそうでないことが示されています)

+0

スーパー!もともと私はこの答えを得ることを望んでいましたが、Robは私が呼んでいた他の問題を解決するのを助けました()。 –

1

おそらく.toHtml().toAscii()を意味します。カッコがないことに注意してください。

+0

私はスーパーバットフィッシュが根本的な質問に実際に答えたので、私はこの答えを受け入れませんでした(私たちはそれを行うことはできますか?)。おかげでロブ。 –

+2

優れています。私はスーパーバットフィッシュが高品質の答えを提供したことをうれしく思います。 –

関連する問題