7

重複の可能性:
Pythonの静的メソッド?

私の質問は非常に簡単だと思いますが、もっと明確にするために、私はただ疑問に思っています、私はこれを持っています:

class MyBrowser(QWebPage):
    ''' Settings for the browser.'''

    def __init__(self):
        QWebPage.__init__(self)
        pass

    def userAgentForUrl(self, url=None):
        ''' Returns a User Agent that will be seen by the website. '''
        return "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15"

また、同じファイル内の別のクラスで、このユーザーエージェントを取得したい場合もあります。

mb = MyBrowser()
user_agent = mb.userAgentForUrl()
print user_agent

私はこのようなことをしようとしていました:

print MyBrowser.userAgentForUrl()

しかし、このエラーが発生しました:

TypeError: unbound method userAgentForUrl() must be called with MyBrowser instance as first argument (got nothing instead)

ですから、私が求めているものを手に入れていただければ幸いです。インスタンスを作成したくない場合もありますが、この種の関数からデータを取得するよりも。それで、質問はそれが可能であるか、またはいいえ、もしそうなら、これを達成する方法について私にいくつかの指示を与えてください。

4

2 に答える 2

23

This is called a static method:

class MyBrowser(QWebPage):
    ''' Settings for the browser.'''

    def __init__(self):
        QWebPage.__init__(self)
        pass

    @staticmethod
    def userAgentForUrl(url=None):
        ''' Returns a User Agent that will be seen by the website. '''
        return "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15"


print MyBrowser.userAgentForUrl()

Naturally, you can't use self in it.

于 2012-12-26T21:58:58.397 に答える
3

staticmethodデコレータを追加し、self引数を削除します。

    @staticmethod
    def userAgentForUrl(url=None):

デコレータがインスタンス呼び出しのケースも処理するため、実際にはオブジェクトインスタンスを介してこのメ​​ソッドを呼び出すことができますが、この方法は一般的に推奨されていません。(インスタンスを介さずに、静的メソッドを静的に呼び出します。)

于 2012-12-26T21:58:30.087 に答える