【发布时间】:2015-01-06 03:35:24
【问题描述】:
我是社区的新手。在我的 Django 项目中,我有一个名为“social”的模块,其中有几个文件,如 facebook.py 和 twitter.py,每个文件的类都是“SocialProvider”的子类
例子
class Facebook(SocialProvider):
在我的社交模块中还有一个名为“helper.py”的文件,其中包含一个 SocialProviderHelper,我想跟踪所有 SocialProvider 子类,并为它们生成不同的列表和标识符。例如.. SocialProviderHelper 可以“找到” Facebook 和 Twitter,并将它们添加到各种列表中,例如 cool_providers = [] popular_providers = [] old_providers 等。目标是制作一个通用的 SocialProviderHelper,其他领域的代码可以导入和使用......例如......在一个视图中我可能想要获取所有“popular_providers”名称......所以我会导入 SocialProviderHelper.. 并执行类似
的操作helper = SocialProviderHelper()
helper.getOldProviders()
在我的 SocialProviderHelper 中,我有:
class SocialProviderHelper(object):
_providers = SocialProvider.__subclasses__()
但是 子类() 似乎返回一个空列表,因为“提供者”是在尚未导入的其他文件中定义的,并且 subclasses() 仅在它们“活动”时维护对该类的弱引用。
有没有办法解决这个问题?
**最终目标是能够在任何地方创建另一个 SocialProvider 子类,只需这样做......
import SocialProvider
class NewSocialNetwork(SocialProvider)
...让 SocialProviderHelper 知道它的存在。**
我尝试使用保留子类注册表的元类来实现“subclasses(),但类似的问题仍然存在。
【问题讨论】:
标签: python django subclass metaclass