検索

ホームページ  >  に質問  >  本文

クラス内のメソッドが変数を取得できないことについての Python 初心者

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

リーリー

結果:

######私の質問:######

2 つの値、1 つは haha​​ と 1 つは 20を渡しました。なぜまだ 0 と出力されるのですか?

仅有的幸福仅有的幸福2806日前892

全員に返信(4)返信します

  • 三叔

    三叔2017-06-22 11:55:00

    簡単に言えば、get 関数は変数「haha」と 20 をクラスの属性に割り当てていませんでした

    リーリー

    実際に描いた矢印は、Attr 関数ではなく、上記の 2 つの get 関数を指しています。

    返事
    0
  • 阿神

    阿神2017-06-22 11:55:00

    あなたのcat.get_name("哈哈") 返回了一个局部变量 new_name 的值, 并没有改变 self.new_name 的值,所以执行 self.name = self.get_name(self.new_name) 之后 self.name 仍是 0.

    返事
    0
  • 巴扎黑

    巴扎黑2017-06-22 11:55:00

    属性 new_name と new_age は Cat 属性に属します。クラス属性を割り当ててアクセスするには、このクラスのオブジェクトを使用する必要があります (このクラスのオブジェクトを表すことは、self を通じて C++ の this ポインターとして理解できます)。クラスの属性とメソッドを呼び出すことができます)、get_name と get_age でクラスの属性に値を割り当てず、メソッドによって渡されたデータを返しただけなので、Cat の属性 new_name と new_ageクラスは再割り当てされておらず、同じままです。Cat クラスの new_name と new_age の値を変更したい場合は、次のように変更できます。


    def get_name(self, new_name):

    リーリー

    def get_age(self, new_age):

    リーリー


    または set メソッドを提供します:


    def set_new_name(self, new_name):

    リーリー

    def set_new_age(self, new_age):

    リーリー

    def get_name(self):

    リーリー

    def get_age(self):

    リーリー

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-06-22 11:55:00

    リーリー

    これは関数のパラメータを直接返すだけで、他には何も行いません。 print(cat.get_name('xxx')),查看这个函数的返回结果。类属性new_name依然是0。因此,在Attributes中,相当于传进去的是0,所以self.name得到的也是0。这就是打印出来的结果依然是0 の理由を実装してみることができます。

    でも、まだ入門段階のようで、Javaから移行したのかもしれません。 。 。したがって、この種の問題を根本的に解決したい場合は、次のような提案があります。

    • 裸で使用しないでくださいgetset,建议使用@property、このキーワードを検索して関連知識を学びましょう。

    • 現在 Cat类中尝试用self去访问name,表明你希望这是一个实例属性。实例属性请全部放在__init__ にいるため、他のメソッドでインスタンスのプロパティを初期化しないでください。

    Pythonの基礎をさらに強化することをお勧めします。

    返事
    0
  • キャンセル返事