python - 如何遍历类属性列表并更改它们的值?
问题描述
我正在尝试创建一个函数,如果用户没有在输入字段中输入任何值,那么它将文本值设置为 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__
- 我在这里有些摇摆不定。
推荐阅读
- javascript - 无法从嵌套数组中提取
- r - 将数据从一列拆分为R中的不同列
- google-cloud-platform - 使用 g 套件进行 azure 广告用户配置
- javascript - 有一个检查许多项目的事件侦听器更好,还是让每个项目都有自己的侦听器?
- html - 如何使用 SASS/CSS 使 HTML 表格占满宽度
- reactjs - 如何将 es6 箭头函数参数替换为自定义类型(接口)?
- r - 安装 RStudio 后如何解决错误
- c# - 任务等待者
不实施 INotifyCompletion - bash - 存储 bash 脚本的输出以供重用
- ruby-on-rails - Rails SMTPAuthenticationError - 不接受用户名和密码