【发布时间】:2016-09-29 14:07:43
【问题描述】:
我有一个名为SocialPlatform 的课程:
class SocialPlatform:
nb_post = 0
def __init__(self, data):
self.data = data
self._init_type()
self.id_post = self._init_id_post()
@classmethod
def _init_id_post(cls):
cls.nb_post += 1
return cls.nb_post
还有其他三个继承自 SocialPlatform 的类:
class Facebook(SocialPlatform):
_NAME = 'facebook'
@classmethod
def get_class_name(cls):
return cls._NAME
# code here
class Twitter(SocialPlatform):
_NAME = 'twitter'
@classmethod
def get_class_name(cls):
return cls._NAME
# code here
class Instagram(SocialPlatform):
_NAME = 'instagram'
@classmethod
def get_class_name(cls):
return cls._NAME
# code here
我的想法是每次创建SocialPlatform 的实例时增加nb_post。我认为这个变量在所有继承自SocialPlatform的类之间共享
所以我在我的主要功能中进行了测试:
def main():
post = Post() # an other class with stuff in it, it doesn't matter here
social_platform = {
'facebook': Facebook,
'twitter': Twitter,
'instagram': Instagram
}
while True:
try:
platform = social_platform[post.actual_post['header']['platform']](post.actual_post['data'])
except KeyError:
print 'Platform (%s) not implemented yet' % post.actual_post['header']['platform']
sys.exit(84)
print 'platform name : ' + platform.get_class_name()
print 'post id : ' + str(platform.id_post)
# platform.aff_content()
post.pop()
if not len(post.post):
break
print 'enter return to display next post'
while raw_input() != "": pass
但是当我使用这段代码时,我得到了这个输出:
platform name : twitter
post id : 1
enter return to display next post
platform name : facebook
post id : 1
enter return to display next post
platform name : twitter
post id : 2
使用此方法nb_post 在 Twitter、Facebook 或 Instagram 实例之间共享,而不是在所有实例之间共享。
所以我的问题是:有没有办法在 python 中做到这一点?
【问题讨论】:
标签: python inheritance