我有一个类,其中包含多个列表作为属性,以及多个add方法,用于根据对象的类型将对象附加到特定列表中。你知道吗
我的代码读取包含对象类型的csv文件,以便创建并将其添加到我的购物车中。
我的问题是,我正在测试对象类型以使用if elif
语法调用正确的'add'函数,但这不是很好,也很难维护。你知道吗
例如
import csv
class my_item():
def __init__(self, name):
self.name = name
class fruit(my_item):
pass
class vegetable(my_item):
pass
class meat(my_item):
pass
class fish(my_item):
pass
class shopping_cart():
def __init__(self):
self.fruits = []
self.vegetables = []
self.meat = []
self.fish = []
def add_fruit(self, o):
self.fruits.append(o)
def add_vegetable(self, o):
self.vegetables.append(o)
def add_meat(self, o):
self.meat.append(o)
def add_fish(self, o):
self.fish.append(o)
def __str__(self):
msg = ""
msg += "{:<25}= {:<5}\n".format('Total', str(len(self.fruits) + len(self.vegetables) + len(self.meat) + len(self.fish)))
for attrname in vars(self):
value = getattr(self, attrname)
if isinstance(value, list):
msg += " {:<23}= {:<5}\n".format(attrname, len(value))
return msg
def main():
input_f = 'input.csv'
my_cart = shopping_cart()
with open(input_f, 'r') as i:
rows = csv.reader(i, delimiter=';')
for row in rows:
item = globals()[row[0]](row[1])
if item.__class__.__name__ == 'fruit':
my_cart.add_fruit(item)
elif item.__class__.__name__ == 'vegetable':
my_cart.add_vegetable(item)
elif item.__class__.__name__ == 'meat':
my_cart.add_meat(item)
else:
my_cart.add_fish(item)
print (my_cart)
if __name__ == '__main__':
main()
你看到了if elif
块的替代品吗?你知道吗
谢谢你的反馈。你知道吗
当然,您只需要动态地创建函数名并调用它。 小心,只有当我的购物车有
add_{{ item name }}
方法时,这才有效。你知道吗我可以建议一个更简单的课堂设计吗。你知道吗
my_item
保持原样,其他类fruit, vegetable etc
。已删除对
shopping_cart
进行修改,使得self.items
是一个字典,其中键是项的名称fruit, vegetables
,值是这些项的列表那么代码可能如下所示
输出看起来像
相关问题 更多 >
编程相关推荐