gpt4 book ai didi

python - 设置属性和调用就地变异方法之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:38 26 4
gpt4 key购买 nike

我主要用numpy做数据分析,对底层程序不是很了解,所以这可能是显而易见的。

我不明白通过简单地分配属性来设置属性与调用就地更改该属性的方法之间的区别。您可以同时执行这两项操作的示例是:

In [1]: import numpy as np

In [2]: a = np.array([[1, 2, 3],
...: [4, 5, 6]])

In [3]: a.shape
Out[3]: (2, 3)

In [4]: a.reshape(3,2)
Out[4]:
array([[1, 2],
[3, 4],
[5, 6]])

In [5]: a
Out[5]:
array([[1, 2, 3],
[4, 5, 6]])

In [6]: a.resize(3,2)

In [7]: a
Out[7]:
array([[1, 2],
[3, 4],
[5, 6]])

In [8]: a.shape = (6,)

In [9]: a
Out[9]: array([1, 2, 3, 4, 5, 6])

In [10]: a.__setattr__('shape',(3,2))

In [11]: a
Out[11]:
array([[1, 2],
[3, 4],
[5, 6]])

我不明白输入 68 之间有什么区别。显然,两者都更改了 a.shape 属性,而不是像 4 那样返回 reshape 的对象。他们是否都像 10 那样只调用 a.__setattr__()?如果是这样,为什么它们都存在?

(我知道 a.resize() 有额外的能力来增加或减少分配的内存,但我在这里没有使用它——这种口是心非只存在于方法增加了一些其他容量?)

最佳答案

8中的例子其实叫一个property ,python 允许您在 2.1+ 版本中访问。

例如

@property
def shape(self):
"""I'm the 'shape' property."""
return self._shape

@shape.setter
def shape(self, value):
self._shape = value

__setattr__ 调用一个setter:

x.__setattr__('shape', value) 

等同于(查看上面的属性 setter )。

x.shape = value

底层逻辑总是调用修饰函数。

关于python - 设置属性和调用就地变异方法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992733/

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