[求助]关于属性函数@property中deleter的用法

这个该怎么传值达到删除的效果?
请看@modulesGetSetDel.deleter

class Computer:

    def __init__(self) -> None:

        self.modules = {"cpu":"intel", "内存":"镁光", "硬盘":"970-pro"}

        self.moduleslist = []

    @property

    def modulesGetSetDel(self):

        self.moduleslist.clear()

        get_loops = [i for i in self.modules]

        for ii in range(len(self.modules)):

            self.moduleslist.append(get_loops[ii] + ": " + self.modules[get_loops[ii]])

        return self.moduleslist

    @modulesGetSetDel.setter

    def modulesGetSetDel(self, key_value):

        self.modules[key_value[0]] =  key_value[1]

    """

    deleter这一块调用不起来

    """

    @modulesGetSetDel.deleter

    def modulesGetSetDel(self, key_value):

        del self.moduleslist[key_value]

aa = Computer()

print(aa.modulesGetSetDel)

aa.modulesGetSetDel = ["机箱", "海盗船"]

print(aa.modulesGetSetDel)

"""

这么写会报错..有没有人救救孩子

是不是只能用@staticmethod 来进行删除了?

"""

del aa.modulesGetSetDel("机箱")

print(aa.modulesGetSetDel)

哈哈, 自己弄出来了

class Computer:
    def __init__(self) -> None:

        self.modules = {"cpu":"intel", "内存":"镁光", "硬盘":"970-pro"}

        self.moduleslist = []


    @property
    def modulesGetSetDel(self):
        self.moduleslist.clear()
        get_loops = [i for i in self.modules]

        for ii in range(len(self.modules)):

            self.moduleslist.append(get_loops[ii] + ": " + self.modules[get_loops[ii]])
        return self.moduleslist


    @modulesGetSetDel.setter
    def modulesGetSetDel(self, key_value):

        self.get_key_value_loops = [i for i in key_value]
        for i in range(len(self.get_key_value_loops)):
            self.modules[self.get_key_value_loops[i]] =  key_value[self.get_key_value_loops[i]]
        


    @modulesGetSetDel.deleter
    def modulesGetSetDel(self):
        for i in range(len(self.get_key_value_loops)):
            del self.modules[self.get_key_value_loops[i]]


aa = Computer()

# #打印原始字典
print("原始字典数据: ", aa.modulesGetSetDel)

# #打印新增的字典
aa.modulesGetSetDel = {"机箱":"海盗船", "测试1":"测试11"}
print("新增字典数据: ", aa.modulesGetSetDel)

# 打印删除后的字典数据
del aa.modulesGetSetDel
print("删后字典数据: ", aa.modulesGetSetDel)

打印结果:

原始字典数据:  ['cpu: intel', '内存: 镁光', '硬盘: 970-pro']
新增字典数据:  ['cpu: intel', '内存: 镁光', '硬盘: 970-pro', '机箱: 海盗船', '测试1: 测试11']
删后字典数据:  ['cpu: intel', '内存: 镁光', '硬盘: 970-pro']

就是不晓得这种写法规范不规范

没怎么看懂你这个的目的?如果是想删除最后加入的项目,那内部不应该用 deque来实现么?删除数据就是deque.pop()就好了。 :sweat_smile: 不管什么东西都是list一把梭哈不是好习惯。

我只是想实验下@property的用法