Python语法:uuu getitem_uuuuuuuu和uuuu setitem_uuuuuuuuuuu与输入元组?

2024-09-30 08:38:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的项目中,我正在研究以下代码:

我很难理解13号线的右边。它是什么意思?它是什么类型的语法?有什么文件我可以进一步研究吗?非常感谢

class LazyD(dict):
    d_args = {}

    def __setitem__(self, name, args):
        self.d_args[name] = args         # line 5

    def __getitem__(self, name):
        return get_d(*self.d_args[name]) # line 8

ds = LazyD()

for my_type in ["A", "B"]:       
    ds[my_type] = (my_type, var1, var2, var3)  # line 13

Tags: 文件项目代码nameself类型mydef
1条回答
网友
1楼 · 发布于 2024-09-30 08:38:14

执行此操作时:

ds[my_type] = (my_type, var1, var2, var3)

因为ds是一个LazyD,它的__setitem__()将被调用。第一个参数是传递的索引,因此在本例中my_type。Python将把它设置为的任何值(在本例中为tuple(my_type, var1, var2, var3))作为第二个参数传递

所以,它好像被调用了(self当然将是ds):

ds.__setitem__(my_type, (my_type, var1, var2, var3))

然后将该元组分配给ds.d_args[my_type],以便以后可以调用它。但是这个类非常有趣,因为ds[my_type]不会返回元组,相反,它会调用一些函数get_d(),将扩展的元组作为参数

如果要在ds[my_type] = (my_type, var1, var2, var3)行之后立即执行print(ds[my_type]),它不会像预期的那样打印该元组的值,而是会打印get_d(my_type, var1, var2, var3)的返回值

因为这对我来说似乎是一个意外的结果,所以我不认为这是一个设计非常清晰的类——但它就是这样做的

相关问题 更多 >

    热门问题