繁体   English   中英

如何遍历类属性列表并更改它们的值?

[英]How iterate through a list of class attributes and change their values?

我正在尝试创建一个函数,如果用户没有在输入字段中输入任何值,那么它将文本值设置为 0 或任何其他数字。

    value_text = [self.trig_side_a_value.text, self.trig_side_b_value.text, self.trig_side_c_value.text, self.trig_angle_A_value.text, self.trig_angle_B_value.text, self.trig_angle_C_value.text]
    for i in value_text:
        if i == "":
            i = "0"
        else:
            pass

提前致谢!

好的,所以这里有相当多的错误。 我会尽量用尽可能多的解释来回答这个问题。

一件事是错误的:

value_text = [self.trig_side_a_value.text, self.trig_side_b_value.text, self.trig_side_c_value.text, self.trig_angle_A_value.text, self.trig_angle_B_value.text, self.trig_angle_C_value.text]
    for i in value_text:
        if i == "":
            i = "0"

这将创建一个列表value_text并用文本属性的副本填充它。 更改列表中的内容不会影响 self..text 的元素。

需要发生的是您需要遍历类的属性,设置每个属性的text成员:

这是一个解决方案:

class TextContainer():
    """ This is a class with just one attribute 'text' """
    def __init__(self, text=""):
        self.text = text


class TestClass():
    """ This class contains a set of TextContainer objects as its attributes. """
    def __init__(self):
        self.trig_side_a_value = TextContainer("a")
        self.trig_side_b_value = TextContainer("b")
        self.trig_side_c_value = TextContainer()
        self.trig_angle_A_value = TextContainer("A")
        self.trig_angle_B_value = TextContainer("B")
        self.trig_angle_C_value = TextContainer()

    def test_me(self):
        """ Test the setting of each attribute """
        for attr, container in self.__dict__.items():
            if not container.text:
                container.text = "0"

    def __str__(self):
        """ Returns a string representation of the class """
        return "TestClass: ({}, {}, {}, {}, {}, {})".format(
            self.trig_side_a_value.text,
            self.trig_side_b_value.text,
            self.trig_side_c_value.text,
            self.trig_angle_A_value.text,
            self.trig_angle_B_value.text,
            self.trig_angle_C_value.text)


def main():
    test = TestClass()
    test.test_me()
    print(test)


if __name__ == '__main__':
    main()

希望有帮助。 其他人,请更正我对__dict__ - 我在这里有些摇摇欲坠。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM