1

リターン対別のオブジェクトを、元の変更:私は他の方法が変更と元のオブジェクトを上書き見るPythonのメソッド:私はいくつかの方法が変更されたオブジェクトを返す見て、オリジナルを維持</p> <p>:私は、Pythonに新たなんだとオリエントプログラミングオブジェクト、および非常に基本的な101の質問があり

In: x="hello" 
In: x.upper() 
Out: 'HELLO' 
In: x 
Out: 'hello' 

In: y=[1,2,3] 
In: y.pop(0) 
Out: 1 
In: y 
Out: [2, 3] 

は、これらのいずれかが標準ていますか?与えられたクラスとメソッドについてどのケースを扱っているのかを知る方法はありますか?

+2

変更可能なオブジェクトのメソッドは元のオブジェクトを「上書き」しません。可変オブジェクトと不変オブジェクトの両方がPythonの中心です。 Pythonの基本的な紹介であれば、その違いを説明する必要があります。スタックオーバーフローは他の場所ですぐに利用できる情報を再現するようには設計されていません。 –

+1

特定のクラス/メソッドでどのようなケースであるかを知るには、ドキュメントを調べるだけでよいでしょう。彼らはさまざまな状況で使用されています。 – qxz

+1

[Immutable vs Mutable types](http://stackoverflow.com/questions/8056130/immutable-vs-mutable-types)と公式のPythonドキュメントへのリンクを参照してください。 –

答えて

3

この例では、不変のビルトインオブジェクト(文字列やタプルなど)と変更可能なオブジェクト(リスト、辞書、セットなど)の違いを示しています。

一般に、クラス(オブジェクト)が不変として記述されている場合は、前者の動作を想定し、後者の場合は可変オブジェクトを想定してください。

2

list.pop()はわずかに特殊なケースですが、どちらもPythonでは慣用です。

一般的には、Python のメソッドは、オブジェクトまたはのいずれかに値を返します。 list.pop()は、定義上、リストから項目を削除して返すという点で少し珍しいです。

shape.stretch(x=2).move(3, 5) 

:そうのように一緒に連鎖させるための方法を可能にする - それは他の言語であるが、Pythonで一般的ではありません何

は、オブジェクトを変異し、その同じオブジェクトを返すことです。 ..しかし、プログラムをデバッグするのが難しくなる可能性があります。

オブジェクトが文字列のように不変である場合は、メソッドがそれを(突然定義できないため)変更しないことを確認できます。それに失敗した場合、メソッドがそのオブジェクトを変更するかどうかを判断する唯一の方法は、ドキュメンテーション(通常はPythonの組み込みおよび標準ライブラリオブジェクトに優れています)またはもちろんソースを読み込むことです。

関連する問題