包含自引用数组的Python类
我有一门课是这样的包含自引用数组的Python类,python,python-3.x,Python,Python 3.x,我有一门课是这样的 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 som
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)本身引用类中存储的相同对象,这是一种糟糕的做法吗?道歉,如果这是含糊不清的-我只是想找出最干净的方法来处理这种情况。如果您计划对对象的每个属性应用相同的代码,您可以尝试
john.\uu dict\uu
:
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
首先将这些资产声明为字符串是一个坏主意,尤其是因为(我猜想)您希望使用
DataFrame
来代替它们。第二,您可以使用map()
/reduce()
/filter()
来获得更优雅的方法,但这在很大程度上取决于\do something
code…而不是将asset
定义为john
的属性,为什么不将定义为(john.carData,john.HouseData):…
?