loops - 如何遍历类实例
问题描述
嗨,我正在尝试解决一个简单的问题,但我不知道如何遍历类实例,即
class element :
def __init__(self, a, s, m):
self.name = a ;
self.symbol = s;
self.atomic_mass = m ;
class correction :
def __init__(self, a, atr, v):
self.name = a ;
self.atribute = atr;
self.correct_value = v ;
nitrogen = element("Nitrogen", "N", 12)
correction1 = correction("Nitrogen", "atomic_mass", 14)
我想做的就是找出课堂上是否有“atomic_mass”,如果有的话,把它改成14。我现在正试图弄清楚这个。
当然最后会有一个元素列表=[氮、碳、氦、氧等],我需要找到正确的一个并改变它的值。
到目前为止,我有这个:
def correct(elements, correction):
for i in elements:
for j in correction:
if i.a == j.a:
...
解决方案
您可以使用setattr()
内置方法。例如:
class a:
def __init__(self, a: str, b: str):
this.a = a
this.b = b
inst = a("str1", "str2")
setattr(inst, "a", "new_string_1")
或者干脆inst.a = "new_string_1"
编辑
- 检查类是否具有属性,您可以使用
hasattr
内置方法 - 迭代类道具使用
dir
内置方法
编辑
最后,如果你有类列表,你可以编写更正方法,它需要一个元素列表和更正规则列表。例如:
correction_rules = [
{"attr": "atomic_mass", "search": 1, "change_to": 2},
{"attr": "Name", "search": 1, "change_to": 2}
]
def correct(objects, rules):
for obj in objects:
for rule in rules:
if hasattr(obj, rule["attr"]) and \
getattr(obj, rule["attr"]) == rule["search"]:
setattr(obj, rule["attr"], rule["change_to"])
correct(your_list_of_objects, correction_rules)
推荐阅读
- sql - 如何在两个枢轴列之间设置空间
- python - Ansible 模块用于比较 2 个文件夹中的文件并删除额外内容
- c# - Visual Studio:[CS0433] 类型 Func
存在于两者中 和 - css - 如何去除 1440p 显示器内容下方的白条?
- html - 以编程方式突出显示 html 跨度中的单词和字符串
- typescript - 如何在打字稿中要求 .html 文件并使用 mocha 进行测试
- python - 使用 matplotlib 使用 subplots 和 colorbar 将 x 轴与 sharex 对齐
- haskell - Parsing CLI options for a product type
- php - 如何在 php 中将 30-जनवरी-2019 更改为 2019-01-30
- r - dplyr 通过在另一个数据帧上应用汇总函数来计算新列