Python入門:クラスとメソッドの内側・外側での変数の使い分けをわかりやすく解説
Pythonはオブジェクト指向プログラミング言語です。Pythonではほぼすべてがオブジェクトとして扱われ、それぞれが属性(プロパティ)とメソッドを持ちます。そして「クラス」とは、オブジェクトを生成するための設計図(ブループリント)のようなものです。
この記事では、変数を定義する場所によってアクセス範囲(スコープ)がどのように変わるのかを、具体的なコード例とともに解説します。
クラスの外側で定義された変数(グローバル変数)
クラスの外側で定義された変数は、いわゆるグローバル変数として扱われます。そのため、任意のクラスや、そのクラス内のどのメソッドからでも、単に変数名を書くだけでアクセスできます。
コード例
# クラスの外側で定義された変数
outVar = 'outside_class'
print("Outside_class1", outVar)
''' クラス1 '''
class Ctest:
print("Outside_class2", outVar)
def access_method(self):
print("Outside_class3", outVar)
# オブジェクトを生成してメソッドを呼び出す
uac = Ctest()
uac.access_method()
''' クラス2 '''
class AnotherCtest:
print("Outside_class4", outVar)
def another_access_method(self):
print("Outside_class5", outVar)
# オブジェクトを生成してメソッドを呼び出す
uaac = AnotherCtest()
uaac.another_access_method()この例では、outVarという変数がクラスの外で1度だけ定義されていますが、CtestクラスとAnotherCtestクラスの両方から、さらにその中の各メソッドからも参照できていることがわかります。
実行結果は次のようになります。
Outside_class1 outside_class Outside_class2 outside_class Outside_class3 outside_class Outside_class4 outside_class Outside_class5 outside_class
メソッドの中で定義された変数(ローカル変数)
一方、メソッドの中で定義された変数はローカル変数となり、そのメソッド内でのみアクセス可能です。他のメソッドやクラスから直接参照することはできません。
コード例
# メソッドの中で定義された変数
''' クラス1 '''
class Ctest:
def access_method(self):
# メソッド内で定義された変数
inVar = 'inside_method'
print("Inside_method", inVar)
uac = Ctest()
uac.access_method()
''' クラス2 '''
class AnotherCtest:
def access_method(self):
# inVar にはアクセスできない
pass
uaac = AnotherCtest()
uaac.access_method()この例では、inVarはCtestクラスのaccess_methodメソッド内で定義されているため、同じメソッド内であれば自由に使えます。しかし、別のクラスであるAnotherCtestからは参照できず、もしアクセスしようとするとNameErrorが発生します。
まとめ
- クラス外で定義した変数(グローバル変数):どのクラス・どのメソッドからでも変数名を書くだけでアクセスできる。
- メソッド内で定義した変数(ローカル変数):定義されたそのメソッド内でしか使えない。
変数のスコープを正しく理解しておくと、意図しないエラーを防ぎ、読みやすく保守しやすいコードを書くことができます。特に大規模なプログラムでは、必要以上にグローバル変数を使わず、引数や戻り値、インスタンス変数(self.xxx)を活用してデータを受け渡すことが推奨されます。
-
PythonのMatplotlibで曲線とX軸の間の領域を塗りつぶす方法
PythonのMatplotlibを使って、曲線とX軸の間の領域を塗りつぶす方法を解説します。データの可視化において、曲線の下側の領域を色で強調することは、グラフの視認性を高めるために非常に有効です。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。NumPyを使用して x および y のデータポイントを作成します。plot() メソッドを使って、x と y のデータポイントをプロットします。fill_between() メソッドを使用して、曲線とX軸の間の領域を塗りつぶします。show() メソッドを呼び出して、図を表示します。コード例import matpl
-
PythonでPOSTメソッドを使ってCGIプログラムに情報を渡す方法
CGIプログラムへ情報を渡す方法としては、POSTメソッドの方が一般的により信頼性が高いとされています。POSTメソッドは、GETメソッドとまったく同じ形式でデータをパッケージ化しますが、URLの「?」以降にテキスト文字列として付加して送信するのではなく、独立したメッセージとして送り出す点が異なります。このメッセージは、標準入力(stdin)を通じてCGIスクリプトへ渡されます。POSTメソッドの主な特徴送信データがURLに表示されないため、GETメソッドよりも安全性が高いURLの長さ制限を受けないため、大量のデータも送信できるデータはリクエストボディに格納され、標準入力経由でCGIスクリプト