プログラミング初心者がPythonのクラスメソッドのパラメータについて質問しました
欧阳克
欧阳克 2017-06-22 11:52:02
0
4
944

コードは以下のように表示されます:

リーリー

結果:

このコード自体は問題なく実行可能です。
私の質問は、この場所に self がないにもかかわらず、コード def select(car_type): の 7 行目が実行できるのはなぜですか?授業を学んでいたときに、インスタンス メソッドの各メソッドに self パラメータを追加する必要があると教えられたのを覚えていますが、ここにはパラメータがありません。その後、ここに self を追加してしまい、以下に示すようにエラーが発生しました。

#結果はエラーです:

######なぜこうなった?######

欧阳克
欧阳克

温故而知新,可以为师矣。 博客:www.ouyangke.com

全員に返信(4)
巴扎黑

Python3を使用していますか?
python3では、メンバー関数にselfが付加されていない場合、その関数は静的メンバー関数であることを意味し、「クラス名.関数名(パラメーター)」の形式で直接呼び出すことができます。
ただし、self を追加した場合、この関数は他の呼び出しクラスでは、「クラス名.関数名 (self, パラメーター)」のように呼び出すか、呼び出しクラスにインスタンスを実装する必要があります。 , " インスタンス名。関数名(パラメータ)

Python3 は次のようになります。私のテストでは、Python2 にはありません。

select関数内でselfを追加していますが、CarStore::order()内で呼び出す際に「クラス名.関数名(パラメータ)」の形式を使用しているため誤りです。 CarStore::order() を呼び出すときは、「クラス名.関数名 (self, パラメーター)」に変更するか、CarStore::order() に「インスタンス名.関数名 (パラメーター)」の形式でインスタンスを実装します。それを試してみてください。

昨夜見たのですが、遅すぎたので今朝テストしてみました。

いいねを押す +0
三叔

self 魔法ではないので、任意の名前に変更できます

そうである必要はありません

self

いいねを押す +0
为情所困

リーリー

いいねを押す +0
Ty80

リーリー

この書き方によれば、 select是对象方法,调用需要关联一个实例Factory()。调用时对象实例是与第一个参数car_type绑定。这个参数名一般约定为selfただし、必須ではありません。

次の 2 つの呼び出し方法が異なることを理解する必要があります:

リーリー

最初の方法は、呼び出しにインスタンス オブジェクトを使用することです。最初のパラメータは car_type自动与实例对象f绑定;
第二种方式,用类去调用,第一个参数(car_type)没有绑定;你需要自己绑定才能不出错——也就是你传进去的car_typeFactory.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 がどのように機能するかを理解することをお勧めします。そうしないと、このタイプのコードをうまく書くことができなくなります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート