python静态类与静态方法使用自我?

时间:2012-12-10 08:27:13

标签: python class static static-methods

我正在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(以及更晚一些)。

我知道我可以把这个方法放在类之外,或者我可以使用这个非静态并创建它的实例,但我想尝试这个,因为这是我真正想要的(在我使用全局变量之前)我认为一个包含所有这一切的静态类是最好的主意)

1 个答案:

答案 0 :(得分:5)

我想你想要一个 class 方法:

@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')