728x90
우리가 클래스에서 'self.필드명' 을 많이 이용하는데 이에 대해 궁금점이 생겼고,
해당 내용에 대해 깨달은 바를 적고자 한다.
class Circle_1:
__radius = 10
def Width(self):
width = np.pi * self.__radius ** 2
return width
def Round(self):
length = 2 * np.pi * self.__radius
return length
def __str__(self):
print("원의 반지름 : ", self.__radius)
print("원의 넓이 : ", self.Width())
print("원의 둘레 : ", self.Round())
Circle2 = Circle_1()
Circle2.__str__()
class Circle_2:
radius = 10
def Width(self):
width = np.pi * self.radius ** 2
# self.radius 가 아닌 radius는 Width 함수의 지역변수를 의미하게
# 되는데, 함수 내부에 radius 가 정의된 적 없으므로
# "radius" not defined 오류가 발생한다.
# 따라서 클래스의 radius를 호출하려면 self.radius로 기재해야한다.
return width
print(radius)
# print(self.radius)는 'self' not defined 오류가 발생한다.
def Round(self):
length = 2 * np.pi * self.radius
return length
def __str__(self):
print("원의 반지름 : ", self.radius)
print("원의 넓이 : ", self.Width())
print("원의 둘레 : ", self.Round())
Circle3 = Circle_2()
Circle3.__str__()
처음에 self를 붙이지 않으면 " '__radius' not defined " 오류가 발생하길래,
'self 를 붙이지 않아 해당 메모리를 찾지 못하는 구나' 라고 단정지었다.
하지만,
두번째 코드와 같이 캡슐화를 하지 않은 필드에도 적용해 보았고
그 결과,
함수 안에 다양한 메서드가 존재하는데
self 를 붙이지 않으면 해당 변수가 지역변수로 인식되어 클래스의 변수 및 필드가 호출되지 않는다는 것을 깨달았다.
정리하자면, 우리가 클래스의 메서드 내부에서 self 를 이용하는 이유는 - > 해당 메서드에서 지역변수가 아닌 클래스 필드를 호출하기 위해서이다!!!!!
'Python > 객체지향 프로그래밍' 카테고리의 다른 글
(Python) 객체지향 프로그래밍 - 인스턴스가 함수의 인자값인 경우 (0) | 2024.01.15 |
---|---|
(Python) 객체지향 프로그래밍 - 인스턴스 변수와 클래스 변수 (1) | 2024.01.15 |
(Python) 객체지향 프로그래밍 - 매개변수가 있는 생성자 (0) | 2024.01.10 |
(Python) 객체지향 프로그래밍 - 은닉화, 캡슐화 (0) | 2024.01.06 |
(Python) 객체지향 프로그래밍 - 생성자 (0) | 2024.01.06 |