如果要访问给定类的子类列表,可以使用以下__subclasses__
方法:
>>> class MyClass(object):
... pass
...
>>> class Subclass1(MyClass):
... pass
...
>>> class Subclass2(MyClass):
... pass
...
>>> MyClass.__subclasses__()
[<class '__main__.Subclass1'>, <class '__main__.Subclass2'>]
如果您已经知道现有的子类,您可以简单地直接实例化它们:
>>> class MyClass(object):
... def getInstance(self):
... return Subclass1()
...
>>> class Subclass1(MyClass): pass
...
>>> MyClass().getInstance()
<__main__.Subclass1 object at 0x1e72d10>
无论如何,我猜您正在尝试实现单例模式,在这种情况下,我认为您根本不应该使用getInstance
方法。只需使用以下方法实现它:
- 一个模块,因为模块是单例
- 如果实例已存在,则重新实现
__new__
以返回旧实例
- 使用一些元类
还有很多方法可以做到这一点。
如果这不是您的目标,那么也许您应该更改设计,因为超类通常不必了解子类。