class에 정의될 수 있는 메소드 중 특수한 메소드

 

# __init__ : 생성자

- 객체가 생성된 후 가장 먼저 호출되는 메소드- 첫번째 매개변수는 self이며, 이후에 매개변수 추가 가능- 주로 멤버 변수의 초기화 코드로 작성

 

# __del__ : 소멸자

- 객체가 소멸될 때 호출되는 메소드- 외부자원을 사용하는 경우 해제하는 코드를 주로 작성- self이외의 매개변수를 받지 않음!!- del 객체이름 입력하면 삭제할 수 있음

del jw       # __del__이라는 메소드를 호출함

 

# 정적메소드

- 객체를 생성하지 않고 클래스를 이용해서 직접 호출하는 메소드

- 메소드 내에서 멤버변수를 호출할 수 없고, self 매개변수도 사용하지 않음

- @staticmethod로 수식

- 사용법

class 클래스이름:
    @staticmethod
    def 메소드이름(매개변수):
        실행문장
        
클래스이름.메소드이름(매개변수)   #사용법

 

# 클래스메소드

- 정적메소드와 유사하지만, 첫번째 변수로 클래스 객체가 전달되는 것이 다름 

- cls 매개변수 사용

- 클래스 스스로를 호출하는것이므로 클래스변수에 접근가능함

- 사용법

class 클래스이름:
    @classmethod
    def 메소드이름(cls):
        실행문장

 

 

# 사용해보기

- self 매개변수와 cls 매개변수의 차이 : self는 객체를 만들고 객체를 받을 때 사용, cls는 클래스 스스로를 받음

class student:
    count = 1
    @classmethod
    def cmethod(cls):
        print('클래스메소드')
        print(cls.count)     #클래스 스스로를 호출하는것이므로 클래스변수에 접근가능함
    @staticmethod
    def smethod():
        print('정적메소드')

 

 

# 특수메소드 - getter & setter

- private변수 : 내부에서는 접근 가능하지만, 외부에서는 접근 불가능한 변수 (private한 변수로 감싸기 위해서는 변수이름 앞에 __를 붙임)

- public변수: 내부와 외부에서 다 접근 가능한 변수                                                                                                                          - python의 경우 기본적으로 모든 멤버는 다 public 변수 (그래서 python에서는 getter와 setter가 잘 쓰이지 않음)

- private변수를 사용하기 위해서 getter & setter

class human:
    def __init__(self):
        self.__age = 31    #private변수
    @property              #getter선언(private변수에 접근하겠다)
    def age_getter(self):
        return self.__age
    @age_getter.setter     #setter선언(private변수를 수정하겠다)
    def age_setter(self, value):
        self.__age = value
        
jw = human()               #객체생성
jw.age_getter
#31
jw.age_setter = 36
jw.age_getter
#36

* 실습하면서 생긴 오류

jw.age_getter()하면 typeerror남. ()를 뺴고해야 값이 리턴됨

jw.age_setter(36)하면 typeerror남. jw.age_setter = 36해줘야 함.

+ Recent posts