25
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python 内部クラスについて

Last updated at Posted at 2019-03-17

目次

  • 内部クラス
  • ソースを動かしてみる
  • まとめ

内部クラス

ソースだとこんなの

test.py
import sys

class Outer:
    def __init__(self):
        print("create Outer Class")
        print(self.Inner)
        # self.Innerのメモリサイズを確認
        print(sys.getsizeof(self.Inner))

    class Inner:
        def __init__(self):
            print("create Inner Class")

outer = Outer()

内部クラス=クラスの中のクラスのこと
英語だとinner class とかnested classって言うよ〜

ソースを動かしてみる

$ python test.py 
create Outer Class
<class '__main__.Outer.Inner'>
1056

Innerクラスはインスタンス化されてないのでprint("create Inner Class")は実行されていません。
しかし、self.Innerはしっかり存在して、メモリサイズも出てきています。

まとめ

内部クラスのメリットとして以下が考えられます。

  • ソース上で依存関係を表せる
  • 外側クラスのインスタンス化を強制できる

逆にデメリットとして

  • 余計なメモリを消費している

機械学習などで大量のデータを扱うクラスに関しては、リソースの節約のために内部クラスを使用しないのがベターな気がしました。
ご意見、ご指摘は大歓迎です。むしろ他の人はどう考えているのか知りたいです。よろしくお願いします。。

25
16
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?