使用dict而不是课堂

时间:2020-06-25 03:09:26

标签: python python-3.x class dictionary oop

我不知道何时应该使用字典而不是Python上的类。如果一个类可以完成与字典相同的功能,为什么还要使用字典呢?例如,接下来的两个片段执行相同的操作:

使用课程:

class PiggyBank:
    def __init__(self, dollars, cents):
        self.dollars = dollars
        self.cents = cents


piggy1 = PiggyBank(2, 2)
print(piggy1.dollars)  # 2
print(piggy1.__dict__)  # {'dollars': 2, 'cents': 2}

使用字典:

def create_piggy(dollars, cents):
    return {'dollars': dollars, 'cents': cents}


piggy2 = create_piggy(2, 2)
print(piggy2['dollars'])  # 2
print(piggy2)  # {'dollars': 2, 'cents': 2}

因此,最后,我将创建两个具有相同信息的静态对象。什么时候应该使用类或函数创建实例?

4 个答案:

答案 0 :(得分:4)

如果字典足以满足您的用例并且您不被迫使用Class,则可以使用dictionary。但是,如果您需要类的其他好处(如下所示),则可以将其写为类

一些可能需要使用Class的用例

  • 当您需要频繁更新代码时
  • 何时需要封装
  • 当您需要重用相同的接口,代码或逻辑

答案 1 :(得分:1)

您通常会在做 dynamic 动作时使用字典-在某些情况下,您写作时不知道所有键或信息代码。还要注意,类具有无法将数字用作属性的限制。

作为一个经典示例(使用collections.Counter可以提供更好的解决方案,但我们仍会保留其教育价值),如果您有一个要计数的值列表,则可以使用字典来有效地做到这一点:

items_to_count = ['a', 'a', 'a', 'b', 5, 5]

count = {}
for item in items_to_count:
    if item in count:
        count[item] += 1
    else:
        count[item] = 1

# count == {'a': 3, 'b': 1, 5: 2}

答案 2 :(得分:1)

为什么要使用字典?

字典是内置容器,具有很多功能,可以免费使用给我们。由于它们是内置的,因此许多功能可能已经过优化。

答案 3 :(得分:1)

dict通常被称为“关联数组”。它们就像Python中的常规list一样,除了可以使用字符串(或任何可哈希类型)代替使用整数作为索引。

您当然可以使用Python类实现类似listdict的对象(以及类似set的对象和类似str的对象),但是如果已经有一个完全符合您需要的对象类型,您为什么要这么做?

因此,如果您要寻找的只是一个关联数组,那么dict很可能会为您服务。但是,如果您跳进圈来实现一个已经完成dict的类的类,那么您将“重新发明轮子”,并为将来的代码读者提供更多的工作,以便弄清楚您的班级正在做的事情是重新实现dict而没有真正的额外功能。

基本上,如果您只需要一个dict,则只需使用dict。否则,您将编写大量额外的代码(可能易于产生错误),而没有真正的收获。