Что я' Я пытаюсь достичь того, чтобы в дочернем классе напрямую перезаписать все его родительские атрибуты уже созданным классом, который совпадает с родительским.
Ответ в этом вопросе хорошо описывает то, что я хочу: Создайте экземпляр дочернего класса из экземпляра родительского класса.
Если вы имеете в виду (как предложил @Barmar), что вам нужен способ скопировать все атрибуты экземпляра Foo к экземпляру Bar, это другая история. В этом случае вам все равно нужно внимательно определить, что именно вы подразумеваете под «всеми атрибутами».
Под «всеми атрибутами» я имею в виду просто скопируйте поверх моих определенных. Точно так же, как pydantic видит и захватывает их для контекста ввода. Причем автоматически, потому что у большинства классов не просто 10-20 атр, а 50-200. И задавать каждый по одному в init вручную, чтобы скопировать его значение, было бы излишним, поскольку они уже однажды записаны в соответствующем классе.
Проблема проектирования заключается в том, что политика должна сделать первый запрос к базе данных, чтобы получить идентификатор Case_id записи, на которую она ссылается, чтобы с помощью этих собранных знаний она знала, как загрузить детали этой политики из базы данных.
Это потому, что я загружаю файл Python ({case_id}.py), в котором я храню конкретную информацию о том, какое имя таблицы нужно искать и какие поля там есть. Таким образом, он полностью разделен.
main.py
Код: Выделить всё
from Models.Policy import Policy
from Models.PolicyDetails import PolicyDetails
policy = Policy()
policy.findById(policy_id)
details = PolicyDetails()
details.loadFrom( policy )
Код: Выделить всё
from pydantic import BaseModel
from .ActiveRecord import ActiveRecord
class Policy(BaseModel, ActiveRecord):
id: int = None
case_id: str = None
v_number: str = None
g_id: str = None
def __init__(self):
BaseModel.__init__(self)
ActiveRecord.__init__(Policy)
def tableName(self):
return 'gn_policy'
def idName(self):
return 'identifier'
def getTableColumnMap(self):
return {
"identifier": "id",
"case_description": "case_id",
"pol_doc_number": "v_number",
"grow_val_identifier": "g_id"
}
В этом классе я динамически загружаю файлы {case_id}.py, создаю их экземпляры и хочу использовать дочерний элемент .
Код: Выделить всё
import importlib
from pydantic import BaseModel
from .Policy import Policy
class PolicyDetails(BaseModel):
details: object = None
def __init__(self):
pass
def loadFrom(self, policy: Policy):
case_id = policy.case_id
case_class = self.load_class(case_id)
case_instance = case_class(policy)
def load_class(self, id: str):
case_module = importlib.import_module("."+id, "Models")
case_class = getattr(case_module, id)
return case_class
GERM.py
Код: Выделить всё
class GERM(Policy):
def tableName():
return 'gn_GERM'
address: str = None
def getTableColumnMap(self):
return {
"adr": "address"
}
Код: Выделить всё
class IMP(Policy):
def tableName():
return 'gn_IMP'
firstname: str = None
lastname: str = None
def getTableColumnMap(self):
return {
"FI": "firstname",
"LA": "lastname"
}
Предназначено ли наследование для решения этой проблемы или, более того, уже сделано по составу?
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/789 ... hild-class