在python3中创建一个类来存储字典并设置字典值更改的对象属性

2024-09-27 23:19:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典:

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

我知道一定有更好的方法在类中存储字典,并在值更改时做些什么。你知道吗


Tags: nameselfif字典objectvaluefeedbacksetattr
1条回答
网友
1楼 · 发布于 2024-09-27 23:19:44

对于每种类型的反馈,你都需要一些额外的代码,但是如果参数是一致的,你可以将反馈类型本身分离成这样的类型。你知道吗

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,然后在手动设置时调用。你知道吗

编辑:通过定义dict和类中的设置来帮助可读性和IDE检查/完成,而不是重复我自己。

相关问题 更多 >

    热门问题