1

pycassaでデータベース挿入スクリプトを実行しています。後で他の関数によって頻繁に使用されるいくつかの変数を定義するパブリック静的クラスを設定したいと思います。これが私が持っているものです...

class ks_refs():
    pool = ConnectionPool('TweetsKS')

    user_name_cf = self.cf_connect('UserName')
    user_tweet_cf = self.cf_connect('UserTweet')

    def cf_connect(column_family):
        cf = pycassa.ColumnFamily(self.pool, column_family)
        return cf

うまくいかないと確信しているので、まだこれを実行しようとはしていません。最初にこの静的変数「pool」が必要であることがわかります。次に、「pool」が機能する必要があるcf_connectメソッドを使用してuser_name_cfとuser_tweet_cf(およびそれ以降)を設定します。

そのメソッドをクラスの外に置くことも、非静的にしてインスタンスを作成することもできますが、これが本当に必要なことなので、これを試してみたいと思います(グローバルを使用する前は、これをすべて保持する静的クラスが最良のアイデアです)

4

1 に答える 1

5

代わりにクラスメソッドが必要だと思います。

@classmethod
def cf_connect(cls, column_family):
    cf = pycassa.ColumnFamily(cls.pool, column_family)
    return cf

これで、クラスで定義されたプールを簡単に参照できます。

ただし、あなたuser_name_cfuser_tweet_cf「属性」は機能しません。クラス定義を作成した後、これらを追加できます。

class ks_refs():
    pool = ConnectionPool('TweetsKS')

    @classmethod
    def cf_connect(cls, column_family):
        cf = pycassa.ColumnFamily(cls.pool, column_family)
        return cf

user_name_cf = ks_refs.cf_connect('UserName')
user_tweet_cf = ks_refs.cf_connect('UserTweet')

ここで、それらはモジュールレベルの定数です。または、事後に属性としてクラスに追加できます。

ks_refs.user_name_cf = ks_refs.cf_connect('UserName')
ks_refs.user_tweet_cf = ks_refs.cf_connect('UserTweet')
于 2012-12-10T08:31:21.230 に答える