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