そうです、Pythonは別のプログラミングモデルです。理解すべきことは、Pythonでは、次のことを確認したときです。
class Foo(object):
...
これは実際には「クラス宣言」ではありません。それは「クラスの創造」のようなものです。class..
インタプリタがラインに到達した瞬間に、前ではなく、クラスオブジェクトが作成され、準備が整います。そして、このクラスオブジェクトについての1つのことは、基本的にそのインスタンスについて何も知らないということです。
クラスがインスタンスにアクセスできる(そしてデータメンバーは通常インスタンス上にある)のは、実際にメソッドを実行しているときだけです。この構文:
def bar(self, x):
...
は興味深い。明示的な最初の引数は、何か別のことが起こっているというヒントのようなものです。そうです:あなたが書くときinstance.bar(x)
、実際に起こっているのはFoo.bar(instance, x)
です。
つまりFoo
、インスタンスに到達する唯一のチャンスはメソッドを使用することです。
したがって、明示的な__init__
クラスモデルが必要な場合は、メソッドに明示的にリストするのが最善の策です。
class Foo(object):
def __init__(self):
self._bar = None # Bar is an important "private" member
self._baz = None # As is baz
self._fizzbuzz = 4 # Of course, you can also provide defaults here
私がここでベースから離れている場合は、修正したいのですが、これが現在のPythonの理解方法です。