본문 바로가기

Python/객체지향 프로그래밍

(Python) 객체지향 프로그래밍 - self

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 를 이용하는 이유는 - > 해당 메서드에서 지역변수가 아닌 클래스 필드를 호출하기 위해서이다!!!!!