같은 클래스지만 다른 메소드 변수에 접근이 가능한 이유
618
35 câu hỏi đã được viết
shoot 메소드에서 __init__ 메소드의 파라미터인 wow_height에 접근할 수 있는 이유가 뭐죠?
__init__ 메소드의 파라미터 wow_height는 지역 변수 아닌가요?
자바에서는 같은 클래스 안에 있는 메소드라도 다른 메소드의 변수에 접근할 수 없는 걸로 알고 있거든요.
Câu trả lời 3
1
클래스로 만든 인스턴스 객체는 프로그램이 종료되기 전까지 메모리에서 살아있게 됩니다. 물론 그 객체에 설정한 인스턴스변수 값도 같이 살아있게 됩니다. 이는 클래스를 통해 객체가 만들어질 때 부여한 변수 값들이겠죠. 이러한 기능을 할 수 잇도록 만드는 것이 클래서 정의시 사용하는`self` 라는 기능입니다. 또한 말씀하신 함수들은 클래스(틀)에서 정의된 함수들이기 때문에, 객체별로 당연히 behavior로써 갖고 있게 되고, 내부에서 해당 객체별 상태값(말씀하신 self.변수값)에 접근할 수 있는 것 입니다.
참고로 '클래스(혹은 인스턴스) ""내""에서(e.g. 클래스에 정의된 함수) 인스턴스 변수 접근하는 것은 어떤 언어든지 가능합니다. 다만, 클래스 """외부"""에서 해당 인스턴스 변수를 접근할 수 있냐 없냐는 언어별로 차이가 있다 라고 생각하시면 될 것 같습니다.
1
안녕하세요!
클래스의 함수에서 정의하는 변수는 일반 함수 내에서의 변수(지역변수) 와는 성격이 다릅니다. 해당 클래스로 만든 객체가 살아있는 동안 계속 유지가 됩니다. 그렇게 해주는것이 self의 역할입니다.
자바도 비슷하게 인스턴스 변수가 있지만, 기본적으로 자바에는 public, private, protect 등의 문법으로 외부에서 인스턴스변수의 직접 접근을 막을 수 있습니다. 파이썬은 이러한 문법적 제약을 최대한 풀어놓아 최대한 자유롭게 코딩할 수 있도록 만든것이 특징입니다. 물론 각 방법의 장단점도 각각 존재하구요.
도움이 되시길 바랍니다
0
해당 클래스로 만든 객체가 살아있다는 것이 다른 두 메소드에서 변수를 공유하는 것과 어떤 연관이 있는지... 초보자라 그런지 이해가 잘 안 되네요.
그러니까 결론은 그냥 "파이썬 시스템은 자바와 다르게 동일 클래스 안에 선언된 메소드끼리는 self를 통해 자유롭게 변수에 접근할 수 있도록 만들어졌다."로 이해하고 외우면 되는 건가요?
수업자료 다운로드
0
28
1
extension 설치 시 오류 문의
0
141
2
아나콘다 윈도우즈 설치 시, 다른 설치만 보입니다.
0
377
2
모듈 스크랩파이 설치가 안됩니다
0
142
1
아나콘다 프롬프트에서 모듈이 실행이 안되어요
0
290
2
desktop이 없어서..
0
132
1
Continue 질문입니다
0
100
1
%0이 짝수라는뜻인가요?
0
121
1
continue에 관해서 질문드립니다
0
103
1
사용자 파일 밑에 Anaconda 설치가 되지 않습니다.
0
339
1
예외처리 구문
0
93
1
파이썬 모듈
0
139
2
jupyter toc이 설치되지 않습니다.
0
111
1
딕셔너리 문자 따옴표
0
98
1
띄어쓰기를 꼭 언더바로 표시하는 이유가 있나요?
0
561
1
자료를 다운받았는데 주피터에 뜨지않습니다
0
178
2
아나콘다 설치시에 jupyter lab이 안깔렸어요
0
341
1
수업자료를 어떤 곳에 넣어야 하나요?
0
254
1
익스텐션 설치하면 아래와 같은 화면이 나옵니다
0
233
2
리스트
0
165
1
수치 연산?
0
177
1
윈도우 아나콘다 설치를 했습니다만, 설치 후 아나콘다 프롬프트를 실행하려고 검색창에서 입력했는데, 프롬프트가 없어요.
0
1493
1
함수의 정의/호출 관련 질문
0
211
1
(base)가 안 뜹니다.
0
341
2

