在改变对象的方法和不改变对象的方法之间,Python有一些深刻的区别吗?

时间:2016-03-29 13:10:50

标签: python methods

例如,在

的情况下
>>> f.read()
'This statement is false.\n'
>>> f
<_io.TextIOWrapper name='test.txt' mode='r' encoding='UTF-8'> 
>>> f.seek(0) 
>>> f.read()
'This statement is false.\n'

f仍然是具有相同内容的文件对象。而

>>> lst = []
>>> lst.append(2)
>>> lst
[2]

列表lst已更改。

这种差异是一般主题或趋势的实例吗?是否有一组特殊的方法可以改变对象? (在我的示例中,f会将f.seek(0)视为改变吗?)

3 个答案:

答案 0 :(得分:3)

对象是否被方法改变不会使方法有任何不同。所以回答你的问题:不。

然而,当然,一些方法的设计目的是改变对象,有些方法的目的是不改变对象。

(另外,当然有classmethodstaticmethod s,它们不能改变实例 - 否则它们不会是类或静态方法!)

答案 1 :(得分:1)

我不太清楚你的想法,但总的来说,不,改变对象的方法与不改变对象的方法之间没有根本的区别。 Python没有类似于C或C ++的const关键字。

事实上,有时候故意不会透露方法是否会改变它所作用的对象。这是为了允许不同的实现,其中一些将改变对象的状态,其中一些不会。这在编写并行代码时会产生影响(例如,使用multiprocessing):从多个线程并发使用对象可能不安全,并且可能无法明确告诉您。

答案 2 :(得分:1)

我没有看到这个问题的目标。所有语言都有需要修改对象的方法和不修改对象的方法。如果要将元素追加到数组是不可能的,不要修改对象。 答案是依赖于你想要做的,方法需要改变对象。