new_name 및 new_age 속성은 Cat 속성에 속합니다. 클래스 속성을 할당하고 액세스하려면 클래스 객체를 사용해야 합니다. 이 클래스의 액세스는 self입니다. 이 클래스의 객체를 나타내는 것은 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 이유를 구현해 볼 수 있습니다.
하지만 아직 초급 단계인 것 같고, Java에서 옮겨왔을 수도 있습니다. . . 따라서 이러한 유형의 문제를 근본적으로 해결하고 싶다면 다음과 같은 제안이 있습니다.
알몸으로 사용하지 마세요get和set,建议使用@property, 이 키워드를 검색해 관련 지식을 배워보세요.
현재 Cat类中尝试用self去访问name,表明你希望这是一个实例属性。实例属性请全部放在__init__에서는 다른 방법으로 인스턴스 속성을 초기화하지 마세요.
간단히 말하면, 귀하의 get 함수는 변수 "haha"와 20을 클래스 속성에 할당하지 않았습니다
으아악당신이 그린 화살표는 실제로 Attr 함수가 아니라 위의 두 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입니다. 이 클래스의 객체를 나타내는 것은 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):
으아악으아악
이것은 함수의 매개변수를 직접 반환할 뿐 다른 작업은 수행하지 않습니다.
print(cat.get_name('xxx'))
,查看这个函数的返回结果。类属性new_name
依然是0
。因此,在Attributes
中,相当于传进去的是0,所以self.name
得到的也是0
。这就是打印出来的结果依然是0
이유를 구현해 볼 수 있습니다.하지만 아직 초급 단계인 것 같고, Java에서 옮겨왔을 수도 있습니다. . . 따라서 이러한 유형의 문제를 근본적으로 해결하고 싶다면 다음과 같은 제안이 있습니다.
알몸으로 사용하지 마세요
get
和set
,建议使用@property
, 이 키워드를 검색해 관련 지식을 배워보세요.현재
Cat
类中尝试用self
去访问name
,表明你希望这是一个实例属性。实例属性请全部放在__init__
에서는 다른 방법으로 인스턴스 속성을 초기화하지 마세요.Python 기초를 더욱 강화하는 것이 좋습니다.