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

Guy*_*ito 1 python static static-methods class

我正在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
Run Code Online (Sandbox Code Playgroud)

我还没有尝试过这个,因为我相信它不会工作.你可以看到我首先想要这个静态变量'pool',然后使用需要'pool'工作的cf_connect方法设置user_name_cf和user_tweet_cf(以及更晚一些).

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

Mar*_*ers 5

我想你想要一个方法:

@classmethod
def cf_connect(cls, column_family):
    cf = pycassa.ColumnFamily(cls.pool, column_family)
    return cf
Run Code Online (Sandbox Code Playgroud)

现在,您可以轻松地参考课程中定义的池.

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')
Run Code Online (Sandbox Code Playgroud)

然后它们是模块级常量,或者你可以在事后将它们作为属性添加到类中:

ks_refs.user_name_cf = ks_refs.cf_connect('UserName')
ks_refs.user_tweet_cf = ks_refs.cf_connect('UserTweet')
Run Code Online (Sandbox Code Playgroud)