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 回答