重载__getitem__

以下代码不运行,但希望您能得到我
我正在尝试做.
class my_dict(dict):
def __getItem__(self,key,crazy = false):
如果疯狂== true:
返回5 * self.get(键)
别的:
返回self.get(键)
foo = my_dict()
foo ['a'] = 123
打印foo ['a']
打印foo ['a',crazy = true]
是否有可能与其他
争论?还可以实现这一目标吗?或是
唯一写一个普通函数调用的解决方案
`def my_get(self,key,crazy = false)'?
再见
Andreas

# 回答1


看来您不能完全按照自己的尝试来做到这一点,但是您可以做到
这个
def __getItem __(*args):
如果len(args)1和args [1]:返回self.get(args [0]) * 5
返回self.get(args [0])
那你会像
打印foo ['a']
打印foo ['a',true]
甚至
打印foo ['a',"疯狂"]
如果你愿意.
或者
疯狂= true
打印foo ['a',疯狂]
" andreas matthias" 新闻:uf ************@buckbeak.hogwarts ...
# 回答2


" inhahe" 新闻:ly *******************@bignews3.bellsouth.net. ..
只是为了澄清,您可以使用它:
crazy ="我疯了"#这只能完成一次
打印foo ['a']#不疯狂
打印foo ['a',疯狂] #crazy
(这可能完全是个性的,我不知道.)
# 回答3


实际上,我不考虑您要超载的事实,哪个
可以在getItem中采用多个值
那怎么样
班级疯狂:通行证
然后在您的dict课中:
def __getItem __(*args):
如果args [-1]很疯狂:
返回self.get(args [:-1])*5
别的:
返回self.get(args)
接着
打印foo [1,2]#不疯狂
打印foo [1,2,疯狂] #crazy
我 *认为 *这会起作用
" andreas matthias" 新闻:uf ************@buckbeak.hogwarts ...
# 回答4


哦,我不知道.我完全误解了错误消息.
显然,Args已经是一个元组,所以应该是:
def __ getItem __(self,args):
这是在某个地方记录的吗?我在任何地方都找不到.
谢谢.
再见
Andreas
# 回答5


不知道,我只是以为它会采用多个论点,因为我知道我
以前看过D [1,2]的表格,偶然地等同于
D [(1,2)]因此,我想ARGS是一个元组很有意义.
# 回答6


En Thu,2008年5月22日20:38:39 -0300,Andreas Matthias 哦,我不知道.我完全误解了错误消息.
显然,Args已经是一个元组,所以应该是:
def __ getItem __(self,args):
这是在某个地方记录的吗?我在任何地方都找不到.
不,那是不正确的.首先,除了语法obj [index]提供了一个定界符,并且允许OBJ [a,b]作为OBJ [(a,b)] -OBJ允许OBJ [a,b]允许OBJ [(a,b)] .__ getItem __((a,b))
您可以在任何函数中使用 *args符号;它始终是一个元组(单身人士,当您只用一个参数调用函数时)
pydef foo(*args):打印args ... pyfoo(1) (1,) pyfoo(1,2) (1,2) pyfoo((1,2)) ((1,2),) 与之比较: pydef bar(arg):打印arg ... pybar(1) 1 PYBAR(1,2) Trackback(最近的最新电话): 文件" ",第1行,<模块> typeError:bar()完全采用1个参数(2给定) pybar((1,2)) (1,2) - - Gabriel Genellina

标签: python

添加新评论