2012-12-10 35 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')