有时,人们会在Python中引用“X类”对象。Example:
data_iter_maker -一个零参数可调用的,它返回一个迭代器在类似于数据块的对象.
“迪克”有一个精确的定义吗?如果是的话,它是什么?它是否是一个可以像字典一样索引的对象x:x[a],其中a是一个可理解的对象?在这种情况下,namedtuple可能不被认为是dict样的,因为您不能使用像x['a']这样的表达式进行索引(上次我检查过您必须编写x.a)。但另一方面,名词组在功能上非常类似于词典,所以我不知道该怎么想。
愤世嫉俗的是,我很想猜测" dict -like“意思是”一个足够相似的对象,以至于我的代码会产生相同的答案,就像您提交了一个语义上等价的dict对象一样“。换句话说,“运行这个函数,并为自己找出你的论点是否是切分的!”
更普遍的情况是,X类对象是否实现与X相同的接口?
发布于 2015-11-21 16:48:23
Python使用'duck-typing':
“如果它看起来像鸭子,叫起来像鸭子,那它一定是鸭子。”
或者,“如果它看起来像鸭子,嘎嘎叫的像鸭子,那么它就足够接近鸭子,把它当作鸭子对待。”很明显,第一个听起来更好。这与"Easier to Ask for Forgiveness than to ask for Permission"的python理论密切相关。
一个类似于的对象是one which implements (or emulates) the dictionary interface. The same concept often comes up for iterables,通常在like') objects中。
发布于 2015-11-21 16:53:56
实用鸭子打字:
dict_meths = set(dir({}))
# Python3
class A:
pass
default_meths = set(dir(A()))
diff = dict_meths - default_meths现在,diff是:
{'__contains__',
'__delitem__',
'__getitem__',
'__iter__',
'__len__',
'__setitem__',
'clear',
'copy',
'fromkeys',
'get',
'items',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values'}当您在类中实现所有这些方法时,您肯定有一个类似于数据的对象。如果缺少一些不太常见的对象(如update ),您可能还会谈论一个类似于dict的对象。比较file-like objects。
https://stackoverflow.com/questions/33845604
复制相似问题