Python dict类的用途是什么
有人能解释一下dict类的用途吗?这段代码来自《深入Python》Python dict类的用途是什么,python,Python,有人能解释一下dict类的用途吗?这段代码来自《深入Python》 我理解键=值对与self['name']=filename的赋值,但是继承dict类与此有什么关系?请帮助我理解。如果您不熟悉面向对象编程的继承概念,请至少看一看wiki文章(不过,这只是介绍,可能不是最好的) 在python中,我们使用此语法将类A定义为类B的子类: class A(B): pass # empty class 在您的示例中,由于FileInfo类继承自标准类型,您可以将该类的实例用作字典(因为它们具有常
我理解键=值对与
self['name']=filename
的赋值,但是继承dict
类与此有什么关系?请帮助我理解。如果您不熟悉面向对象编程的继承概念,请至少看一看wiki文章(不过,这只是介绍,可能不是最好的)
在python中,我们使用此语法将类A
定义为类B
的子类:
class A(B):
pass # empty class
在您的示例中,由于FileInfo
类继承自标准类型,您可以将该类的实例用作字典(因为它们具有常规dict
对象具有的所有方法)。除此之外,还允许您按如下键分配值(dict
提供了处理此操作的方法):
这是您想要的解释还是您不了解其他内容?当Python中的一个类继承自另一个类时,这意味着在继承的类上定义的任何方法本质上都是在新创建的类上定义的 因此,当
FileInfo
继承dict
时,意味着dict
类的所有功能现在都可供FileInfo
使用,除了FileInfo
可以声明的任何内容之外,或者更重要的是,通过重新定义方法或参数来覆盖
由于Python中的
dict
对象允许键/值名称对,这使得FileInfo
能够访问相同的机制。它用于创建您自己的自定义字典类型
您可以为自己的特殊目的覆盖\uuuuu init\uuuuu
、\uuuu getitem\uuuuuu
和\uuuuuu setitem\uuuuu
方法,以扩展字典的使用
阅读《深入Python》文本的下一节:我们使用这种继承来处理文件信息,就像使用普通字典一样
# From the example on the next section
>>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3")
>>> f["name"]
'/music/_singles/kairo.mp3'
fileinfo
类的设计方式是在其构造函数中接收文件名,然后让用户以从普通字典获取值的方式获取文件信息
# From the example on the next section
>>> f = fileinfo.FileInfo("/music/_singles/kairo.mp3")
>>> f["name"]
'/music/_singles/kairo.mp3'
此类类的另一个用途是创建控制其数据的字典。例如,您需要一本字典,当向其分配内容或从其“传感器”键读取内容时,它会执行一项特殊的操作。您可以定义特殊的\uuuuu setitem\uuuu
函数,该函数对键名敏感:
def __setitem__(self, key, item):
self.data[key] = item
if key == "sensor":
print("Sensor activated!")
或者,您希望在用户每次读取“温度”键时返回一个特殊值。为此,您将子类化一个\uuu getitem\uuu
函数:
def __getitem__(self, key):
if key == "temperature":
return CurrentWeatherTemperature()
else:
return self.data[key]
@KL-7——您介意提供一个从
dict
继承的子类的不同示例吗?在实践中如何使用它?我不认为人们经常创建dict
或其他内置类型的子类,而是有序字典的实现。正如您在OrderedDict
类中所看到的,是dict
类型的子类。@tkone--继承dict
对象对于键值对是必需的吗?不是每个python对象都有这个功能吗?不,那是JavaScript:)。Python对象具有可通过“点”符号(test.parameter
)访问的属性dict
是一个关联数组,您可以在其中使用关联键访问值。尝试在Python中实例化一个对象,并像访问关联数组一样访问它test['parameter']
。您将得到TypeError:“Test”对象不可订阅。
现在制作一个dict并尝试通过“dot”符号访问它。您将AttributeError:'dict'对象没有属性N
def __getitem__(self, key):
if key == "temperature":
return CurrentWeatherTemperature()
else:
return self.data[key]