Язык программирования не важен, так как готовое решение на Python не смогу найти
public function __construct($data)
{
$subtypesPattern = $this->getSubtypesPattern();
foreach ($data as $key => $val) {
if (!isset($this->{$key})) continue;
$this->{$key} = isset($subtypesPattern[$key])
? new $subtypesPattern[$key]($val)
: $val;
}
}
protected function getSubtypesPattern(): array
{
return [
'key_name' => ClassName::class,
// ...
];
}