コードは以下のように表示されます:
リーリー結果:
このコード自体は問題なく実行可能です。
私の質問は、この場所に self がないにもかかわらず、コード def select(car_type): の 7 行目が実行できるのはなぜですか?授業を学んでいたときに、インスタンス メソッドの各メソッドに self パラメータを追加する必要があると教えられたのを覚えていますが、ここにはパラメータがありません。その後、ここに self を追加してしまい、以下に示すようにエラーが発生しました。
######なぜこうなった?######
Python3を使用していますか?
python3では、メンバー関数にselfが付加されていない場合、その関数は静的メンバー関数であることを意味し、「クラス名.関数名(パラメーター)」の形式で直接呼び出すことができます。
ただし、self を追加した場合、この関数は他の呼び出しクラスでは、「クラス名.関数名 (self, パラメーター)」のように呼び出すか、呼び出しクラスにインスタンスを実装する必要があります。 , " インスタンス名。関数名(パラメータ)
Python3 は次のようになります。私のテストでは、Python2 にはありません。
select関数内でselfを追加していますが、CarStore::order()内で呼び出す際に「クラス名.関数名(パラメータ)」の形式を使用しているため誤りです。 CarStore::order() を呼び出すときは、「クラス名.関数名 (self, パラメーター)」に変更するか、CarStore::order() に「インスタンス名.関数名 (パラメーター)」の形式でインスタンスを実装します。それを試してみてください。
昨夜見たのですが、遅すぎたので今朝テストしてみました。
そうである必要はありませんself
魔法ではないので、任意の名前に変更できますself
リーリー
リーリー
この書き方によれば、
select
是对象方法,调用需要关联一个实例Factory()
。调用时对象实例是与第一个参数car_type
绑定。这个参数名一般约定为self
ただし、必須ではありません。次の 2 つの呼び出し方法が異なることを理解する必要があります:
リーリー最初の方法は、呼び出しにインスタンス オブジェクトを使用することです。最初のパラメータは
car_type
自动与实例对象f
绑定;第二种方式,用类去调用,第一个参数(
car_type
)没有绑定;你需要自己绑定才能不出错——也就是你传进去的car_type
:Factory.selct(car_type)
この行です。ただし、
self
后,这个函数有两个参数,但是你只绑定了car_type
,也就是绑定到第一个参数self
を追加すると、2番目には値がなくなり、必ず何かが間違ってしまいます。ここでしなければならないことは、実際に
リーリーselect
をクラスメソッドに実装することです:それでは、
Factory.select(car_type)
调用时,cls
自动绑定到Factory
,而car_type
则绑定到car_type
を服用してください。上記は、
self
还是cls
に関係なく、単に合意された名前です。機能するのは Python の class-object-method モデルです。「Python ソース コード分析」を読んで、少なくとも @classmethod がどのように機能するかを理解することをお勧めします。そうしないと、このタイプのコードをうまく書くことができなくなります。