関数内でいくつかの関数を使用するクラスを作成してい__init__
ますが、それらの関数を定義する場所のベスト プラクティスがわかりません。通常は__init__
最初に定義するのが好きですが、関数/メソッドを使用する必要がある場合は、最初に定義する__init__
必要があります。クラスの外では役に立たないので、クラスの外で定義したくありませんが、 の前にメソッドを定義するのは面倒です__init__
。これに対する通常の規則は何ですか?
4 に答える
他のすべてのメソッドと同様に、クラスにメソッドを追加するだけです
class Test(object):
def __init__(self):
self.hi()
def hi(self):
print "Hi!"
全く問題無い。
Python スタイル ガイドIIRC には記載されていませんが__init__
、クラスの最初のメソッドにするのが慣例です。
通常の慣習は確か__init__
に他の方法の前に置くことです。これが機能する理由は、関数が呼び出されるまで評価されないためです。Pythonドキュメントから:
関数定義は実行可能ステートメントです。その実行により、現在のローカル名前空間の関数名が関数オブジェクト(関数の実行可能コードのラッパー)にバインドされます。この関数オブジェクトには、関数が呼び出されたときに使用されるグローバル名前空間として、現在のグローバル名前空間への参照が含まれています。
関数定義は関数本体を実行しません。これは、関数が呼び出されたときにのみ実行されます。
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
init の後にメソッドを定義するのが「面倒」なのはなぜですか? そのように考えてください:
定義すると
class MyClass(object):
def __init__(self):
self.something = whatever
self.do_something_else()
def do_something_else(self):
...
__init__
MyClass
isと同じように、クラスのメソッドdo_something
です。のインスタンスを作成するときに呼び出されるクラスの最初のMyClass
メソッドです。したがって、最初に置くこと__init__
は慣習的であるだけでなく、論理的でもあります。
で使用するため、メソッドを最初に定義する必要はありませdo_something_else
ん__init__
。の観点からはMyClass
、別のような方法です。myclass=MyClass()
インスタンスを作成すると、do_something_else
すでに定義されています...