是否可以在循环中生成变量名称?
简单的情况:
class product():
self.shop1_name = None
self.shop1_price = None
self.shop2_name = None
self.shop2_price = None
...
p = product()
# shops is a list of shops
for i, shop in enumerate(shops[0:5]):
p.shop+i+1_name = shop.name # so shop1_name in first loop, shop2_name in second etc...
p.shop+i+1_price = shop.price
所以有许多属性shop1_price, shop2_price...shop10_price
,我想在一个循环中填充它们,而不是手工编写所有这些属性。
有可能吗?
答案 0 :(得分:3)
有可能吗?
是。您可以使用setattr
内置函数动态地向对象添加属性。你真的想这样做吗? Probably not。而不是:
shop1_name, shop2_name, ...
为什么没有名单?
shop_names = [...]
更好的是,由于商店似乎有大量与之关联的数据(name
,price
,...),您可以使用结构化(或非结构化)记录类型来表示购物然后有一个商店列表。记录类型的示例可以像dict
或collections.namedtuple
一样简单,也可以添加一个轻量级类来保存商店数据:
class Shop(object):
def __init__(self, name, price):
self.name = name
self.price = price
shops = [Shop('name1', 100), Shop('name2', 200), ...]
现在,不是shop1_name
,而是shops[0].name
(实际上并没有太大的不同),而且您还可以将所有商店作为一个集合进行迭代。
答案 1 :(得分:0)
使用词典或列表?
Shop = [{'name': "Nisa Local", 'price': 5000},{'name': "Tescos", 'price': 800000}]
添加商店用途:
Shop.append({'name': "Asda", 'price': 10000})
或仅列出:
ShopNames = ['Nisa Local', 'Tescos']
ShopPrices = [5000, 800000]
并添加使用tyhis:
ShopNames.append('Asda')
ShopPrices.append(10000)
答案 2 :(得分:0)
使用类似dict的数据结构:
IF()