我有一个关于Python面向对象编程的简单最佳实践问题,而不是技术性或“如何做?”问题。
最近,我一直在编写一些OOP Python代码,用于读取数据并将其存储在自定义类中。这里太详细了,无法全部发布代码,因此我将使用蛋糕的非常简单的示例进行说明。
我的主要类 - 蛋糕 - 大致如下,并存储有关每个“蛋糕”的各种数据属性。某些变量是字符串,例如名称,而其他变量是整数或浮点数,例如层数。
大量这些对象是在读取数据时创建的,它们都存储在列表中:
最近,我一直在编写一些OOP Python代码,用于读取数据并将其存储在自定义类中。这里太详细了,无法全部发布代码,因此我将使用蛋糕的非常简单的示例进行说明。
我的主要类 - 蛋糕 - 大致如下,并存储有关每个“蛋糕”的各种数据属性。某些变量是字符串,例如名称,而其他变量是整数或浮点数,例如层数。
class cake():
def __init__(self, name, layers, icing):
self.name = name
self.layers = layers
self.icing = icing
大量这些对象是在读取数据时创建的,它们都存储在列表中:
cakebox = []
cakebox.append(cake("chocolate", 2, "Y"))
cakebox.append(cake("chocolate", 3, "Y"))
cakebox.append(cake("chocolate", 2, "N"))
cakebox.append(cake("lemon", 3, "Y"))
cakebox.append(cake("jamsponge", 2, "N"))
cakebox.append(cake("fruit", 1, "N"))
“蛋糕盒子”列表的想法是像一个简单的“数据库”,可以从中获取结果。这可以通过使用列表推导式轻松实现,例如:
icingcakes = [x for x in cakebox if x.icing == "Y"]
但是我发现我一再执行某些操作,例如获取所有唯一蛋糕名称:
uniquecakenames = list(set([x.name for x in cakebox]))
如果我会多次使用这段代码(或类似代码),是否最好创建一个“cakebox”类,并将此代码作为方法,使用“list”作为超类,或者在这个例子中创建一个cakebox类会使事情变得过于复杂?
请注意,真实代码比我的简化蛋糕示例更加复杂....! 另外,我在iPad上仅输入了此示例,请原谅我如果有轻微的代码错误-希望足以传达主要观点。
欢迎所有评论或建议。