코드는 다음과 같습니다.
으아악실행 결과:
내 질문:
2개의 값을 전달했습니다. 하나는 하하, 하나는 20
왜 여전히 0으로 인쇄되나요?
三叔2017-06-22 11:55:00
간단히 말하면, 귀하의 get 함수는 변수 "haha"와 20을 클래스 속성에 할당하지 않았습니다
으아악당신이 그린 화살표는 실제로 Attr 함수가 아니라 위의 두 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입니다. 이 클래스의 객체를 나타내는 것은 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):
으아악또는 설정 방법 제공:
def set_new_name(self, new_name):
으아악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 기초를 더욱 강화하는 것이 좋습니다.