pco2699’s blog

学んだコード・技術について、保存しておく場所

Pythonでインスタンスメソッドの中で、宣言した変数はインスタンスメソッド内限定の変数となる

言いたいこと

Pythonのクラスの作り方はわかりづらい。
クラス変数とインスタンス変数、普通の関数内変数がどのように扱われるかがわからない!
ということで、以下のようなテストコードを書いてみた。

基本的には、以下の理解でよいみたい

  • selfをつけるとインスタンス変数
  • classの直下で宣言された変数はクラス変数
  • 各メソッド内で宣言された変数は関数内変数

コード

 -*- coding: utf-8 -*-

class Hoge():
    hoge = "私はクラス変数としてのhoge" #これはクラス変数として扱われる

    def __init__(self):
        self.hoge = "私はインスタンス変数としてのほげ" # selfをつけるとインスタンス変数
        hoge = "私はinit関数内としてのほげ" # これはinit関数内限定の変数

    def test(self):
        hoge = "私はインスタンスメソッドの中のほげ"  # test内関数の変数
        print(hoge) # -> 私はインスタンスメソッドの中のほげ
        print(self.hoge) # -> 私はインスタンス変数としてのほげ

    @classmethod
    def test_cls_hoge(cls):
        print(cls.hoge) # -> 私はクラス変数としてのhoge

def main():
    hoge = Hoge()
    hoge.test()
    Hoge.test_cls_hoge()

if __name__ == '__main__':
    main()