У меня есть словарь:
Feedback = {'TV1power' : 0, 'TV2power' : 0, 'TV3power' : 0}
Когда TV1power равно 1, я хочу изменить свойство объекта, т.е. Powerbutton.SetState(1)
Я играл со следующим, но не имел большой удачи, поскольку я довольно новичок в python:
FeedbackDict = {'TV1power' : 0, 'TV2power' : 0, 'TV3power' : 0}
class Feedback(object):
def __setattr__(self, name, value):
object.__setattr__(self, name, value)
if name == 'TV1power':
if value == 1:
Powerbutton.SetState(1)
FeedbackDict[name] = 1
TVFeedback = Feedback()
TVFeedback.TV1power = 1
Я знаю, что должен быть лучший способ хранить словарь в классе и при изменении значения сделать что-то.
Вы не сможете избавиться от наличия лишнего кода для каждого типа отзывов, но если аргументы будут согласованы, вы можете разделить сами типы отзывов на что-то подобное.
FEEDBACK_SETTINGS = {
"tv_1_power" : {
"default": 0,
"callable": print,
},
# ...
}
class Feedback(object):
tv_1_power = None
# ...
def __init__(self):
for name, info in FEEDBACK_SETTINGS.items():
self.__setattr__(name, info["default"])
def __setattr__(self, name, value):
super().__setattr__(name, value)
FEEDBACK_SETTINGS[name]["callable"](value)
feedback = Feedback()
feedback.tv_1_power = 1
В этом случае у вас есть Powerbutton.SetState
как вызываемый для настроек tv_*_power
. Я оставил это, поэтому это будет рабочий, управляемый пример; таким образом вы можете увидеть, что он вызывает print
когда он устанавливает это значение при создании экземпляра, а затем снова, когда он устанавливается вручную.
Изменение: обновлено, чтобы обеспечить читаемость и проверку/завершение IDE за счет повторения себя, определяя настройки как в dict, так и в классе.
name
иvalue
, так как он создаетTVFeedback
ни сTVFeedback