首页 > 解决方案 > 包含自引用数组的 Python 类

问题描述

我有这样的课...

class person:
    def __init__(self, name):
        self.name = name
        self.carData = ""        
        self.HouseData = ""
        #other assets 

我正在像这样循环遍历它......

john = person('John');
for index, row in john.carData.iterrows():
    #do something

for index, row in john.HouseData.iterrows():
    #do something

但在这种情况下,“做某事”是重复的代码——我想对 carData、HouseData 和一个人可以拥有的所有其他资产做同样的事情。

以非重复方式循环遍历这些的最佳方法是什么?我在类定义中考虑过这样的事情,但我很确定它至少不优雅而且可能是错误的......

class person:
    def __init__(self, name):
        self.name = name
        self.carData = ""        
        self.HouseData = ""
        #other assets 
        self.assets = [self.carData, self.HouseData etc]

john = person('John');

for asset in john.assets:
    for index, row in asset.iterrows():
        #do something

定义一个对象列表(在本例中为 self.assets)本身引用存储在类中的相同对象是一种不好的做法吗?抱歉,如果这含糊不清 - 我只是想找出处理这种情况的最干净的方法。

标签: pythonpython-3.x

解决方案


如果您计划对对象的每个属性应用相同的代码,您可以尝试john.__dict__

john = person('John')
for attr, value in john.__dict__.items():
    # e.g. attr == 'carData'
    for index, row in value.iterrows():
        # do something

看到这个问题

这有点骇人听闻,但是如果(例如)您想将代码应用于除“name”之外的每个属性,请执行以下操作:

john = person('John')
for attr, value in john.__dict__.items():
    # e.g. attr == 'carData'
    if attr != 'name':
        for index, row in value.iterrows():
            # do something

推荐阅读