Предположим, у меня есть следующие базовые и производные классы, иллюстрирующие базовый случай наследования классов:
class base(object):
type = []
def __init__(self,arg1,arg2):
self.m1 = arg1
self.m2 = arg2
class derivedA(base): # inherits from base
type = 'A'
base.type.append('A')
def value(self,arg):
return arg*0.345
class derivedB(base):
type = 'B'
base.type.append('B')
def value(self,arg):
return arg*0.186
Теперь предположим, что я хочу определить другой класс, который содержит список любых классов, производных от base
как член:
class container(object):
def __init__(self,dim=None,tp=None):
assert dim>=0
if dim==0:
self.dim = 0
self.lst = [ ]
self.mlt = [ ]
else:
assert tp!=None
self.dim = dim
self.lst = [base(0,0) for _ in range(dim)] # how to call generic constructor of class?
self.mlt = [1.0] * dim
def printVals(self,value):
for d in self.lst:
print(d.value(value))
Как бы я мог в общем случае вывести адекватный конструктор из типа tp
, переданного в качестве аргумента?На самом деле, он только создает список base
членов класса:
gg = container(10,derivedA.type)
gg.printVals(0.5) # 'base' object has no attribute 'value'