1

私は現在、多くのカスタム会社ツールのラッパーを Python で作成しています。

基本的に、各ツールを独自の py ファイルに分割し、ツールへの呼び出しをメソッドとして含むクラスを作成します。これらはすべてパッケージに含まれます。

次に、パッケージからすべてをインポートし、すべてのクラスから継承して、1 つのまとまりのあるクラスとして表示されるマスター クラスがあります。

masterClass.py

pyPackage
- __ init__.py

- module1.py
--class Module1
---method tool1

- module2.py
--class Module2
---method tool2

etc

現在、パッケージ モジュールから継承するマスター クラス ファイルを自動生成していますが、もっと洗練された方法があるのではないかと考えていました。

すなわち

from package import *
class MasterClass(package.all):
    pass
4

1 に答える 1

0

他のすべての小さなクラスから継承する大きなクラスを作成しようとする理由が何であるかはよくわかりませんmasterが、最初に頭に浮かぶのは、設計が逆になっている可能性があるということです。

代わりに、すべてのコマンド モジュールをサブクラス化できる基本クラスを用意することをお勧めします。「ネットワーク」や「圧縮」などの同様の機能を収集するためのインテリジェントな名前空間としてパッケージを使用できます。

class ToolBase(object):
    # common functionality here

    # class attributes

    # base constructor

    # methods: static, class, instance

    pass


class Module1(ToolBase):

    def __init__(self):
        super(Module1, self).__init__()

class Module2(ToolBase):

    def __init__(self):
        super(Module2, self).__init__()

この基本クラスの例では、データベース接続、ソケット、リソースなどのコンストラクターからのセットアップを含め、すべてのサブクラスが ToolBase の機能を期待できます。

そして、おそらく次のようなプロジェクト構造です:

pyPackage
    __init__.py 
        # class ToolBase
        # __all__ = ['network', 'compress']
    network/
        __init__.py
        module1.py
            # class Module1
    compress/
        __init__.py 
        module2.py
            # class Module2

アップデート

基本クラスを使用して共有「ポート」オブジェクトを持つ方法として、一度だけ初期化されるクラス レベルの属性にすることができます。

class ToolBase(object):
    _PORT = None

    def __init__(self):
        if self._PORT is None:
            self._PORT = "PORT"

    @property 
    def port(self):
        return self._PORT


class Foo(ToolBase):

    def go(self):
        print self.port

これで、クラスは単独で便利になり、ポート オブジェクトを共有します。

于 2012-09-04T21:24:31.323 に答える