gpt4 book ai didi

python - 创建一个类,用于存储字典并在 Python 3 中根据字典值更改设置对象属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:21 26 4
gpt4 key购买 nike

我有一本字典:

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 检查/完成,但代价是通过在字典和类中定义设置来重复自己。

关于python - 创建一个类,用于存储字典并在 Python 3 中根据字典值更改设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52463007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com