Использование _replace
в именованных кортежах нельзя сделать "питоническим".Namedtuples должны быть неизменными.Если вы используете именованный кортеж, другие разработчики будут ожидать, что вы не собираетесь изменять ваши данные.
Питонический подход - это действительно класс данных .Вы также можете использовать классы данных в Python3.6 .Просто используйте бэкпорт классов данных из PyPi .
Тогда все становится действительно читабельным, и вы можете использовать getattr
и setattr
для простой адресации свойств по имени:
from dataclasses import dataclass
@dataclass
class Template:
number: int = 0
name: str = "^Name^"
t = Template()
# use setattr and getattr to access a property by a runtime-defined name
setattr(t, "name", "foo")
print(getattr(t, "name"))
Это приведет к
foo