4

Python でクラスとしていくつかのコードを書きましたが、今はそれをパッケージとして配布する準備をしていて、さまざまな部分がどのように組み合わされるべきかを理解するのに苦労していました。

そのため、最初にコードを書いたとき、関数を含むいくつかの関数を含むクラスがありました__init__。これらの各関数を、関数名で名前を付けた独自のファイルに分割しましたが、init関数は引数を取るため、どこに配置すればよいかわかりません。以下に例を示します。

元の形式:

class className(object):

    def __init__(self, arg1, arg2):
         self.arg1 = arg1
         self.arg2 = arg2

    def func1(self):

    def func2(self, arg3):

使用法:

import name

a = name.className(arg1, arg2)
a.func1()
a.func2(arg3)

ファイルツリーは次のようになります。

Name/
    /className
        __init__.py
        func1.py
        func2.py

そして、他の機能を含めます。オリジナルと同じ基本的な使用パターンを維持したいと思います。

さて、私が持っている質問は、その__init__機能がどこに行くべきかということです? __init__.pyファイルの中に?何処か別の場所?__init__.pyもう 1 つの問題は、いくつかのインポートをファイルに入れたかったことです。ファイルに入れる必要__init__.pyがあることはわかっていますが、関数とどのように関係しているのかわかりません__init__。どんな助けでも大歓迎です。

4

1 に答える 1

9

クラスを複数のファイルに分割することはできません。パッケージには、コード (完全なクラス、関数など) を含むファイルである複数のモジュールが含まれている必要があります。

この__init__.pyファイルは、パッケージがインポートされたときに実行され (実際に多くのコードを実行するために使用されることはめったにありません)、ディレクトリがパッケージであり、クラスのコンストラクターではないことを Python に伝えます。

パッケージ (フォルダー) はパッケージとモジュールのコレクションである必要があり、モジュール (ファイル) はコードのコレクションになります。

通常の階層の例:

- somepackage (Folder)
    - __init__.py (File)
    - somemodule.py (File)
        - SomeClass (Code)
        - some_function (Code)

最後に、クラスを複数のファイルに分割することはできません。技術的には、関数をクラスにモンキー パッチするか、その他の奇妙な方法でこれを行うことができますが、コードが不明瞭になるため、決してそうしたくありません。多く。

于 2012-11-04T02:06:24.053 に答える