찾다

 >  Q&A  >  본문

변수를 얻기 위한 클래스의 메소드 실패에 관한 Python 초보자

코드는 다음과 같습니다.

으아악

실행 결과:

내 질문:


2개의 값을 전달했습니다. 하나는 하하, 하나는 20
왜 여전히 0으로 인쇄되나요?

仅有的幸福仅有的幸福2716일 전814

모든 응답(4)나는 대답할 것이다

  • 三叔

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

    간단히 말하면, 귀하의 get 함수는 변수 "haha"와 20을 클래스 속성에 할당하지 않았습니다

    으아악

    당신이 그린 화살표는 실제로 Attr 함수가 아니라 위의 두 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입니다. 이 클래스의 객체를 나타내는 것은 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):

    으아악

    회신하다
    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
  • 취소회신하다