2012-12-10 37 views
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 

我甚至没有试图运行这个,因为我敢肯定它不会工作。你可以看到我想要这个静态变量“池”,然后再使用它需要“池”上班cf_connect方法建立user_name_cf和user_tweet_cf(和一些更晚些)。我知道我可以把这个方法放在类之外,或者我可以有这个非静态的并且创建它的一个实例,但是我想试试这个,因为这是我真正想要的(在我使用全局变量之前但我认为一个静态类持有这一切都是最好的主意)

+2

我认为'静态方法'你的意思是'类方法'(Python不是C++)。然而在我看来,这样做无非是一堆东西包装更进一个命名空间,是精是你们自己的,但它并不比只使用这被普遍认为是不好的编程习惯全局变量更好。 – martineau

+0

欢呼!是的,我更熟悉C#中这种类型的东西 –

回答

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