У меня есть родительский класс и два подкласса child1 (parent) и child2 (parent) вроде следующего кода. (отредактировано более правильно показать, что родительский класс делает что-то)Как вернуть подкласс из параметра __new__
class parent(object):
name = None
def __init__(self,e):
# process the common attributes
name = e.attrib['name']
def __new__(cls,e):
if e.attrib['type'] == 'c1':
return child1(e)
elif e.attrib['type'] == 'c2':
return child2(e)
else:
raise
class child1(parent):
extra1 = None
def __init__(self,e):
super(e)
# set attributes from e that are specific to type c1
class child2(parent):
extra2 = None
def __init__(self,e):
super(e)
# set attributes from e that are specific to type c2
Цель состоит в том, чтобы иметь возможность получить класс «правильного» на основе значения параметра. Поэтому, если я могу сказать, obj = parent(element)
и obj
будет либо child1
, либо child2
в зависимости от того, что такое значение element.attrib['type']
.
И какая у вас проблема? – kindall
Что означает 'super (e)'? Вы хотите 'super (child1, self) .__ init __ (e)' или что-то другое? (И если вы _did_ хотите, чтобы ... вам понадобится 'parent .__ init__', который принимает этот аргумент' e' ...) – abarnert
Да, должен был быть 'parent .__ init__', чтобы принять аргумент e. – ctjctj2