0

このクラスの GetFollowerIDs というメソッドをオーバーライドしようとしています: https://github.com/bear/python-twitter/blob/master/twitter.py#L3705

私が達成したいのは、関数を通常どおり実行してから、next_cursorだけでなく取得することですresult

私は次のことを試しました:

class MyApi(twitter.Api):
    def GetFollowerIDs(self, *args, **kwargs):
        super(MyApi, self).GetFollowerIDs(*args, **kwargs)

        print result
        print next_cursor

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

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

このように呼び出すと:

ids = MyApi.GetFollowerIDs(
                    screen_name=options['username'],
                    cursor=cursor,
                    count=options['batch-size'],
                    total_count=options['total'],
                )

その上、resultすでにnext_cursorIDE で定義されていないと表示されています。

4

2 に答える 2

2

TypeErrorはあなたの定義とは何の関係もありませんが、あなたの呼び出しとは関係ありません:

ids = MyApi.GetFollowerIDs(
                    screen_name=options['username'],
                    cursor=cursor,
                    count=options['batch-size'],
                    total_count=options['total'],
                )

GetFollowerIDsはインスタンス メソッドです。そのため、selfパラメーターが必要です。したがって、クラス自体ではなく、クラスのインスタンスで呼び出す必要があります。

API ドキュメントのサンプルは、 のインスタンスを適切に作成して使用する方法を示していますtwitter.API。代わりにのインスタンスを作成して使用することを除いて、まったく同じことを行いますMyApi

これが一度指摘されても明らかでない場合は、Classesのチュートリアル、またはサードパーティのチュートリアルを読むこともできます。


一方、メソッド内では、super… を介して適切に基底クラスを呼び出していますが、それでは基底クラスのメソッドからローカル変数にアクセスできません。ローカル変数はローカルです。メソッドが実行されている間のみ有効です。したがって、基本クラスのメソッドが戻った後は、それらはもう存在しません。

IDE が定義されていないと言っている理由は、そのメソッドの実装内を除いて、実際には定義されていないためです。

メソッドの実装の内部状態に本当にアクセスする必要がある場合、唯一の合理的な回避策は、メソッドを呼び出す代わりに、そのメソッドの実装をコードにコピーすることです。

于 2013-09-17T19:14:01.403 に答える
-2

self問題は、呼び出し時に 3 行目の引数を忘れていることGetFollowerIDsです。

class MyApi(twitter.Api):
    def GetFollowerIDs(self, *args, **kwargs):
        super(MyApi, self).GetFollowerIDs(self,*args, **kwargs)

        print result
        print next_cursor
于 2013-09-17T19:12:02.687 に答える