例如,在
的情况下>>> 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)
视为改变吗?)
答案 0 :(得分:3)
对象是否被方法改变不会使方法有任何不同。所以回答你的问题:不。
然而,当然,一些方法的设计目的是改变对象,有些方法的目的是不改变对象。
(另外,当然有classmethod
和staticmethod
s,它们不能改变实例 - 否则它们不会是类或静态方法!)
答案 1 :(得分:1)
我不太清楚你的想法,但总的来说,不,改变对象的方法与不改变对象的方法之间没有根本的区别。 Python没有类似于C或C ++的const
关键字。
事实上,有时候故意不会透露方法是否会改变它所作用的对象。这是为了允许不同的实现,其中一些将改变对象的状态,其中一些不会。这在编写并行代码时会产生影响(例如,使用multiprocessing
):从多个线程并发使用对象可能不安全,并且可能无法明确告诉您。
答案 2 :(得分:1)
我没有看到这个问题的目标。所有语言都有需要修改对象的方法和不修改对象的方法。如果要将元素追加到数组是不可能的,不要修改对象。 答案是依赖于你想要做的,方法需要改变对象。