У меня есть набор классов A
, B
, C
в пакете «front end» p1
. Они все наследуют от p1.X
.python3: преобразовать строку в тип
У меня есть еще один набор классов A
, B
, C
в пакете p2
«задний конец». Они все наследуют от p2.Y
.
В p1.X
, я поставил один бэкенд, так что p1.A
использует p2.A
в качестве внутреннего интерфейса, p1.B
использует p2.B
и т.д. Это отображение осуществляются на основе имени класса в унаследованном методе.
Теперь у меня есть, например, backend = "p2.A"
(строка), но когда я пытаюсь это сделать, python не знает о p2
, даже если это импортировано ранее.
Что я сделал не так? Должен ли я импортировать внутри eval? Мне нужен код спагетти ... У вас есть идея?
Спасибо.
PS: Я в настоящее время есть что-то подобное в «родитель» p1.X
класса, который ужасно, но хорошо, чтобы выяснить, что я хочу:
def getBackendClass(self):
myClass = ... # (class without package name)
if myClass == "A":
return p2.A
elif myClass == "B":
return p2.B
...
Почему бы не иметь сопоставление '{classname: class}', а затем использовать 'getattr' для доступа к методу? – jonrsharpe
Спасибо, Джон, но я намерен избегать жесткого кодирования этого. В вашем примере у меня должен быть '{p1.A: p2.A, p2.B: p2.B, ...}' (у меня есть A, B, ...равное более или менее 30 разных классов). Отображение является систематическим (я использовал скрипт vim для его написания ...). –