Pythonでドット演算子を使ってクラス属性へアクセスする方法
Pythonでは、クラス属性(class attribute)とインスタンス属性(instance attribute)を明確に区別することが重要です。クラス属性とは、クラスの各インスタンスではなく、クラスそのものに属する属性のことです。一方、インスタンス属性は、生成された各オブジェクトがそれぞれ独立して保持する値になります。
クラス属性とインスタンス属性の例
以下のコードでは、class_var がクラス属性、i_var がインスタンス属性です。すべてのインスタンスは class_var にアクセスでき、さらにクラス自体の属性としても参照できます。
class MyClass(object):
class_var = 2
def __init__(self, i_var):
self.i_var = i_var
foo = MyClass(3)
baz = MyClass(4)
print(foo.class_var, foo.i_var)
print(baz.class_var, baz.i_var)実行結果
このコードを実行すると、次のような出力が得られます。
(2, 3) (2, 4)
ドット演算子によるアクセス方法
ドット演算子(.)を使うことで、インスタンス経由でもクラス名経由でもクラス属性にアクセスできます。
# インスタンス経由でアクセス print(foo.class_var) # 2 # クラス名から直接アクセス print(MyClass.class_var) # 2
注意点
インスタンス経由でクラス属性に値を代入すると、新しいインスタンス属性が作成され、クラス属性は上書きされません。クラス属性自体を変更したい場合は、MyClass.class_var = 値 のようにクラス名を指定して代入します。
-
Python tkinter入門:TkウィンドウでFrameクラスを使ってウィジェットをグループ化する方法
FrameウィジェットとはTkinterのFrameウィジェットは、複数のウィジェットをひとつのフレーム内にまとめる(グループ化する)ための非常に便利なコンテナです。親ウィンドウ(Tkクラス)に適用される関数やプロパティの多くは、フレームに対してもそのまま利用できます。Frameウィジェットを作成するには、Frameクラスのインスタンスを生成します。ウィンドウ上にフレームを定義したら、あとは任意のウィジェットを選んで、そのフレームの中へ直接配置するだけです。サンプルコード以下の例では、Frameウィジェットを作成し、その中にいくつかのウィジェットを定義しています。# 必要なライブラリをインポー
-
Pythonで名前空間を作成する方法をわかりやすく解説
Pythonでは、パッケージ、モジュール、クラス、関数、メソッドのそれぞれが独自の「名前空間(namespace)」を持っており、変数名はこの名前空間の中で解決されます。そして、関数やモジュール、パッケージが評価される(つまり実行が開始される)タイミングで、新しい名前空間が自動的に生成されます。そのため、名前空間を作成したい場合は、以下のいずれかの操作を行うだけで実現できます。関数を呼び出すオブジェクトをインスタンス化するモジュールをインポートするパッケージをインポートする例えば、「Namespace」というクラスを定義し、そのクラスのインスタンスを生成すれば、そのオブジェクト自体が一つの名前