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(以及更晚一些).
我知道我可以把这个方法放在课外,或者我可以让这个非静态并创建它的实例,但我想尝试这个,因为这是我真正想要的(在我使用全局变量之前,但我认为保持这一切的静态类是最好的主意)
我想你想要一个类方法:
@classmethod
def cf_connect(cls, column_family):
cf = pycassa.ColumnFamily(cls.pool, column_family)
return cf
Run Code Online (Sandbox Code Playgroud)
现在,您可以轻松地参考课程中定义的池.
你user_name_cf和user_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)