1. ホーム
  2. python

[解決済み] Pythonでクラスを別のクラスの中に定義することにメリットはありますか?

2022-08-11 04:44:03

質問

ここで話しているのは、ネストされたクラスについてです。基本的に、私はモデル化している2つのクラスを持っています。DownloadManagerクラスとDownloadThreadクラスです。ここでの明らかな OOP コンセプトは構成です。しかし、構成は必ずしもネストを意味するわけではありませんよね?

次のようなコードがあります。

class DownloadThread:
    def foo(self):
        pass

class DownloadManager():
    def __init__(self):
        dwld_threads = []
    def create_new_thread():
        dwld_threads.append(DownloadThread())

しかし今、私はネストした方が良い状況があるのではないかと考えています。こんな感じ。

class DownloadManager():
    class DownloadThread:
        def foo(self):
            pass
    def __init__(self):
        dwld_threads = []
    def create_new_thread():
        dwld_threads.append(DownloadManager.DownloadThread())

どのように解決するのですか?

この方法は、quot;inner" クラスが単発のものであり、そのクラスが 定義 の外では決して使用されません。例えば、メタクラスを使用する場合、次のようにするのが便利です。

class Foo(object):
    class __metaclass__(type):
        .... 

は、一度だけ使うのであれば、メタクラスを別々に定義する代わりに

私がそのようにネストされたクラスを使用した他の唯一の時は、外側のクラスは密接に関連するクラスの束を一緒にグループ化するための名前空間としてのみ使用しました。

class Group(object):
    class cls1(object):
       ...

    class cls2(object):
       ...

そして、別のモジュールから、Groupをインポートして、Group.cls1、Group.cls2などのように参照することができます。しかし、モジュールを使用することによって、まったく同じことを(おそらくより混乱しない方法で)達成することができると主張する人がいるかもしれません。