У меня есть список методов моего пользовательского объекта, определяемый следующим образом:Python - Как изменить этот дизайн?
METHOD_ATTACK: {
'func': User.handle_attack,
...
}
При обращении с этими действиями, я называю так:
user.handle_action(ACTION, *args)
Целью этого является то, что существуют различные контрольные параметры в словаре METHOD_ *, которые абстрагируют контроль над различными функциями, например, какие из них требуют, чтобы пользователь находился в определенном состоянии, чтобы продолжить действие. handle_action проверяет эти условия перед вызовом метода действия для выполнения действия, если все проходит.
Теперь: Я хочу сделать второй тип пользователя и переопределить некоторые из этих методов в производном классе, поэтому я хочу называть SpecialUser.handle_attack вместо User.handle_attack, если таковой существует.
Один из вариантов заключается в следующем:
METHOD_ATTACK: {
'func': "handle_attack",
...
}
...
func = getattr(user, ACTION["func"])
Это добавляет дополнительный вызов GetAttr посмотреть каждое действие.
Другой вариант - дублировать все МЕТОДЫ _ * для SpecialUser, но это кажется излишним.
Какой дизайн лучше всего подходит для этого изменения?
Почему вы создали свою собственную объектную систему? – Marcin
У меня есть множество ограничений на действия, и было проще обобщить эти ограничения в словаре, чем написать их все в каждом методе действий. –
Ах, также, getattr не так дорого, это происходит все время в python. –