继承python内置数据类型与创建新对象



示例1:继承内置数据类型(字典(

Class example_class(dict): 
def __init__(self):
dict.__init__(self)
self["key1"] = "value1"
self["key2"] = "value2"
self.random_variable = 15

示例2:没有字典继承(但得到相同的"结果"(

Class example2_class: 
def __init__(self):
self.example_dictionary = dict()  # or alternatively {}
self.example_dictionary["key1"] = "value1"
self.example_dictionary["key2"] = "value2"
self.random_variable = 29    

有人能解释示例1和示例2之间的区别吗;2,喜欢优点/缺点

通过从内置类型字典继承,您可以覆盖(一些(内置方法,但是我看到了从这些内置数据类型继承的代码,而没有重新定义任何现有方法,在这种情况下,我不明白为什么您会尝试继承内置数据类型,而不是只在init((方法中创建一个对象。

模糊的答案是,如果您想定义一个具有该类型行为的类,那么继承内置类型是有用的。除非你实现了一堆遵循self.example_dictionary的神奇方法,否则你的example2不会像dict那样工作;您的example1会自动执行dict所能执行的所有操作,因为它dict

collections有一些很好的继承dict的类型的具体例子:defaultdictCounter。如果你同时实现这些类,不管有没有子类化,你会发现子类化的实现要简单得多——此外,子类化意味着如果你使用静态类型检查,defaultdict(是dict的一种类型(在dict所在的任何地方都会被自动接受,这是期望的质量(因为它实际上是CCD_ 14并且做CCD_。

一般来说,第二种方法不允许您使用所有dict魔术。

e_dict = example_class()
# all of this works
print(e1["key1"])
print(len(e1))
e1.update({"a": "b"})
print(e1) # it has nice representation
print("key1" in e1)

还有更多

当然,你可以实现所有需要的方法,但如果你需要一些dict魔术,从dict继承就更容易了

还有更多的选项,比如MutableMapping或UserDict,你可以在这里阅读更多关于它的信息

最新更新