我希望在基类文件中有一个类列表,它们在运行时创建派生类时保存它们:
BaseClass.py:
# This is a list of objects to populate, holds classes (and not instances)
MyClassesList=[]
class MyBase(object):
name='' #name of the specific derived class
def __init__(self):
pass
这是一个真实世界的例子:
我无法修改任何派生类代码,因此我想维护基类中添加的服务器列表,然后在运行时访问此列表
# Populate the Servers list automatically.
# This is a list of available servers to choose from, holds classes (and not instances)
Servers=[]
class ServerBase(object):
name='' #name of the specific server class, for each server class
def __init__(self):
self.connected = False
def __del__(self):
self._disconnect()
def connect(self):
DBG("connect called for server {self.name}, is already connected: {self.connected}")
if self.connected: return
self._connect()
self.connected = True
def get_data(self):
self.connected or self.connect()
data=''
# We're obligated to read the data in chunks.
for i in range(100):
data += self._get_data()
return data
def _connect(self):
raise NotImplementedError("Interface Function Called")
def _disconnect(self):
raise NotImplementedError("Interface Function Called")
def _get_data(self):
raise NotImplementedError("Interface Function Called")
答案 0 :(得分:0)
假设你想要的是一个在运行时创建的派生类对象列表(虽然不知道为什么会这么想)。
在创建Derived类的对象时,在Base类的__init__
函数中,传入的self将是Derived类的对象,除非派生类重写__init__()
函数并且不要拨打super().__init()
,在这种情况下,我不确定是否可能。
如果您控制派生类,则可以在派生类“super().__init__()
中调用__init__()
,然后让__init__()
函数将该对象保存到列表中。” p>
您可以使用self
添加到所需的列表中。
如下所示的简单测试可能会对您有所帮助 -
class CA:
def __init__(self):
print('Type - ' + str(type(self)))
>>> CA()
Type - <class '__main__.CA'>
<__main__.CA object at 0x006B9830>
class CASub(CA):
pass
>>> CASub()
Type - <class '__main__.CASub'>
<__main__.CASub object at 0x006B9890>
可能有更好的方法,这将是一种方式。