7

関数内でいくつかの関数を使用するクラスを作成してい__init__ますが、それらの関数を定義する場所のベスト プラクティスがわかりません。通常は__init__最初に定義するのが好きですが、関数/メソッドを使用する必要がある場合は、最初に定義する__init__必要があります。クラスの外では役に立たないので、クラスの外で定義したくありませんが、 の前にメソッドを定義するのは面倒です__init__。これに対する通常の規則は何ですか?

4

4 に答える 4

14

他のすべてのメソッドと同様に、クラスにメソッドを追加するだけです

class Test(object):
    def __init__(self):
        self.hi()

    def hi(self):
        print "Hi!"

全く問題無い。

Python スタイル ガイドIIRC には記載されていませんが__init__、クラスの最初のメソッドにするのが慣例です。

于 2012-08-21T11:41:33.237 に答える
3

通常の慣習は確か__init__に他の方法の前に置くことです。これが機能する理由は、関数が呼び出されるまで評価されないためです。Pythonドキュメントから:

関数定義は実行可能ステートメントです。その実行により、現在のローカル名前空間の関数名が関数オブジェクト(関数の実行可能コードのラッパー)にバインドされます。この関数オブジェクトには、関数が呼び出されたときに使用されるグローバル名前空間として、現在のグローバル名前空間への参照が含まれています。

関数定義は関数本体を実行しません。これは、関数が呼び出されたときにのみ実行されます。

于 2012-08-21T11:49:20.840 に答える
1

It's better to define __init__ function as first function, and you can call functions defined after __init__ inside it.

class A:
    def __init__(self):
        print self.x()

    def x(self):
        return 10
于 2012-08-21T11:41:46.810 に答える
0

init の後にメソッドを定義するのが「面倒」なのはなぜですか? そのように考えてください:

定義すると

class MyClass(object):

    def __init__(self):
        self.something = whatever
        self.do_something_else()

    def do_something_else(self):
        ...

__init__MyClassisと同じように、クラスのメソッドdo_somethingです。のインスタンスを作成するときに呼び出されるクラスの最初のMyClassメソッドです。したがって、最初に置くこと__init__は慣習的であるだけでなく、論理的でもあります。

で使用するため、メソッドを最初に定義する必要はありませdo_something_else__init__。の観点からはMyClass、別のような方法です。myclass=MyClass()インスタンスを作成すると、do_something_elseすでに定義されています...

于 2012-08-21T11:56:41.273 に答える