python静态类,带有使用self的静态方法?

python静态类,带有使用self的静态方法?,python,class,static,static-methods,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_fam

我正在用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”,然后设置user\u name\u cf和user\u tweet\u cf,稍后使用cf\u connect方法设置其他变量,该方法需要“pool”才能工作


我知道我可以把这个方法放在类之外,或者我可以用这个非静态的方法来做一个实例,但我想试试这个,因为这是我在使用globals之前真正想要的,但我认为一个静态类包含所有这些是最好的主意

我想你应该用一个类方法来代替:

@classmethod
def cf_connect(cls, column_family):
    cf = pycassa.ColumnFamily(cls.pool, column_family)
    return 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')

我认为您应该使用类方法:

@classmethod
def cf_connect(cls, column_family):
    cf = pycassa.ColumnFamily(cls.pool, column_family)
    return 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')

我认为静态方法是指类方法Python不是C++。然而,在我看来,这样做无非是将一堆东西包装到一个名称空间中,这本身是好的,但它并不比仅仅使用全局变量好多少,这通常被认为是一种糟糕的编程实践。干杯!是的,我更熟悉CI的这种类型的东西,用静态方法来思考,你是指一个类方法Python不是C++。然而,在我看来,这样做无非是将一堆东西包装到一个名称空间中,这本身是好的,但它并不比仅仅使用全局变量好多少,这通常被认为是一种糟糕的编程实践。干杯!是的,我更熟悉C语言中的这类东西