当前位置: 首页 > 面试题库 >

列表中的Python属性

许庆
2023-03-14
问题内容

我是Python的新手,我刚刚发现了属性。当我在一个简单的变量上尝试它时,它工作得很好,但是我无法使其在列表上工作。当执行下面的代码时,它将调用两次getter而不是setter。我知道在我的示例中,该属性没有附加值,但只是为了简化。

class C:
    def __init__(self):
        self._x = [1, 2, 3]

    @property
    def x(self):
        print("getter")
        return self._x
    @x.setter
    def x(self, value):
        print("setter")
        self._x = value

c = C()
c.x[1] = 4
print(c.x[1])

有人知道我在做什么错吗?


问题答案:

仅当您直接获取或设置属性时,才使用setter / getter:

c.x           # getter
c.x = [1,2,3] # setter

如果您修改属性中的元素,则会获得该属性,然后设置相应的元素。您的示例等效于

d = c.x       # getter again
d[1] = 4

您还可以使用__getitem____setitem__直接允许设置和获取特定项目。

class C:
    def __init__(self):
        self._x = [1, 2, 3]

    @property
    def x(self):
        print("getter")
        return self._x
    @x.setter
    def x(self, value):
        print("setter")
        self._x = value

    def __getitem__(self, idx):
        print("getitem")
        return self._x[idx]

    def __setitem__(self, idx, value):
        print("setitem")
        self._x[idx] = value

>>> c = C()
>>> c[1] = 3
setitem
>>> c.x
getter
[1, 3, 3]
>>> c[2]
getitem
3


 类似资料:
  • 问题内容: 我在python中有一个 统一 的对象列表: 现在,我想提取一个具有该类某些属性的列表(比如attr),以便将其传递给某个函数(例如用于绘制该数据) pythonic的做法是什么, ? 也许派生列表并添加一个方法,所以我可以使用一些习惯用法,例如 ? 问题答案: 您还可以编写: 这样,您将获得一个节省内存的生成器。有关更多好处,请参见Generator Expressions 。

  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 我有一个充满行的文件,其中每一行都有银行账户对象的属性。文件布局示例: 1, IE33483, alex,1,100,20, s 2,IE30983,乔,1,0,20,c 3,IE67983,汤姆,1,70,20,s 我试图创建一些代码,将搜索这个文件的用户输入(例如,他们输入他们的id,这是每行的第一个元素),并将使用这3个属性来创建一个对象。有什么帮助吗?这是我到目前为止所尝试的,但它似乎不适

  • 问题内容: 我有一个 清单清单 : 我想转换为一个 集合, 即删除重复列表并从中创建一个仅包含 唯一 列表的新列表。 在上述情况下,所需答案将是 但是当我这样做时,它给了我错误 TypeError:无法散列的类型:“列表” 你能解决我的问题吗?提前致谢! 问题答案: 由于列表是可变的,因此不能进行哈希处理。最好的选择是将它们转换为元组并形成一个集合,像这样 我们一次遍历一个列表,将其转换为一个元组

  • 我正在尝试过滤scala中对象列表的列表属性。例如: 用java定义的类 我的过滤器函数返回字符串列表而不是结果列表 UPDATE我想取回listOf中的所有结果,其中每个结果的名称属性被过滤。

  • 问题内容: 我正在尝试加载电子表格,并将工作表列表传递回我的QML界面。但是我找不到找到将列表(以及后来的字典)提供回QML脚本的方法。 这是我的QML: 这是我的python类: 当我打开电子表格时,输出为: 第一行显示python的列表正确,第二行显示QML中的脚本成功获取字符串属性,但第三行未正确获取list属性。 问题答案: 除了使用正则表达式可能会失败之外,您还必须使用list而不是li