コードは以下のように表示されます:
リーリー結果:
2 つの値、1 つは haha と 1 つは 20を渡しました。なぜまだ 0 と出力されるのですか?
三叔2017-06-22 11:55:00
簡単に言えば、get 関数は変数「haha」と 20 をクラスの属性に割り当てていませんでした
リーリー実際に描いた矢印は、Attr 関数ではなく、上記の 2 つの get 関数を指しています。
阿神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
.
巴扎黑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_age(self, new_age):リーリー
リーリー
def set_new_age(self, new_age):リーリー
def get_name(self):リーリー
def get_age(self):リーリー
仅有的幸福2017-06-22 11:55:00
リーリー
これは関数のパラメータを直接返すだけで、他には何も行いません。 print(cat.get_name('xxx'))
,查看这个函数的返回结果。类属性new_name
依然是0
。因此,在Attributes
中,相当于传进去的是0,所以self.name
得到的也是0
。这就是打印出来的结果依然是0
の理由を実装してみることができます。
でも、まだ入門段階のようで、Javaから移行したのかもしれません。 。 。したがって、この種の問題を根本的に解決したい場合は、次のような提案があります。
裸で使用しないでくださいget
和set
,建议使用@property
、このキーワードを検索して関連知識を学びましょう。
現在 Cat
类中尝试用self
去访问name
,表明你希望这是一个实例属性。实例属性请全部放在__init__
にいるため、他のメソッドでインスタンスのプロパティを初期化しないでください。
Pythonの基礎をさらに強化することをお勧めします。