gpt4 book ai didi

python - 为什么我可以将元素分配给没有 setter 的列表?

转载 作者:行者123 更新时间:2023-12-05 03:16:48 26 4
gpt4 key购买 nike

我一直在做一个学校的 OOP python 项目,我偶然发现了这个问题:

class AList:
def __init__(self, l):
self.__a_private_attribute = l

@property
def l(self):
return self.__a_private_attribute


if __name__ == '__main__':
li = AList([0])
li.l[0] = "this shouldn't work"
print(li.l)

这个的输出是

["this shouldn't work"]

我如何才能在只有 getter 而没有 setter 的列表上调用方法。我知道隐私不是 python 的强项,但我不明白为什么我可以在列表中分配项目。

我原以为 python 会引发 AttributeError,因为我试图在没有 setter 的情况下重新分配一些东西。有谁知道我为什么不引发错误?

最佳答案

How am I able to call methods on a list that does only have a getter and no setter

因为您从未尝试设置列表。您得到了列表,然后更改了它的第一个元素。这类似于:

some_var = li.l
some_var[0] = "this shouldn't work"

之所以可行,是因为列表是可变的,您可以设置列表的元素,而无需重新分配列表本身。

如果您尝试执行 li.l = ["this shouldn't work"],它不会起作用,因为这实际上是在尝试设置 li.l

关于python - 为什么我可以将元素分配给没有 setter 的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74469038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com