상태이상 : 호기심 중독

이것저것 알아두면 언젠간 도움이 된다.

코딩/Python!

클래스 - 객체생성, 생성자, 소멸자, 생성자 오버로딩 [Python]

IT코코아 2018. 7. 20. 04:42

예시 코드

class Animal :

    def __init__(self, name = None, age = None):
        if name == None :
            self.name = "이름이 없어요!"
        if age == None : 
            self.age = "나이를 모르겠어요!"
            return
        self.name = name
        self.age = age

    def setInfo(self):
        print("이름은 뭔가요?")
        self.name = input()
        print("나이는 몇 살인가요?")
        self.age = input()
    def __del__(self):
        print("{}가 없어졌어요!" .format(self.name))

cat = Animal("popi", 2)
dog = Animal()

print(cat.name)
print(dog.name)
del cat
dog.setInfo()
print(dog.name)

클래스를 선언하는 방법

class 클래스명 : 으로 시작하여 다음줄 부터 클래스안의 내용을 코딩하면 됩니다.

클래스 관련 용어 설명

클래스 : 설계도라고 생각하면 된다.

객체(object) : 클래스(설계도)에 의해 만들어진 물건이라고 생각하면 된다.

인스턴스(instance) : 클래스에 의해 만들어진 객체를 인스턴스라함. ( 객체는 클래스의 인스턴스 )

메서드(Method) : 클래스안에 정의된 함수를 말한다.

생성자(initializer) : 객체를 생성할 때, 자동으로 호출되는 함수를 말함.

소멸자(destructor) : 객체가 소멸할 때, 자동으로 호출되는 함수를 말함. (del명령)

멤버 변수 : 클래스안의 변수.

self : 생성된 객체 자기 자신을 나타내는 예약어.

객체 생성

클래스를 작성한 다음
변수명 = 클래스명() 이런식으로 하면됩니다.
단, 클래스명()에서 ()의 인자값은 생성자의 매개변수의 개수와 일치 해야합니다.

생성자

def __init__(self, name = None, age = None):
        if name == None :
            self.name = "이름이 없어요!"
        if age == None : 
            self.age = "나이를 모르겠어요!"
            return
        self.name = name
        self.age = age

이 부분이 생성자이며 __init__함수를 클래스내에서 정의해주면 생성자로 인식됩니다.
생성자를 따로 클래스안에 정의하지 않으면 아무 내용이 없는 빈 __init__함수가 자동으로 정의됩니다.

생성자의 매개변수는 객체를 생성할 때의 인자값을 결정합니다.

cat = Animal("popi", 2)

객체를 생성하는 코드입니다. 여기서 인자값으로 2개를 넘겨주고 있습니다.  

def __init__(self, name = None, age = None):

생성자의 매개변수를 보면 self, name, age 이렇게 3개입니다.
self는 생성된 객체 자기 자신을 나타내는 예약어라고 했죠.
여기서 생성하는 객체의 이름(변수)는 cat이 됩니다. 따라서 cat의 메모리주소가 들어가게됩니다.
그래서 객체를 생성할 때 self에 해당하는 값은 따로 입력해주지 않는 것 입니다.

따라서 우리가 객체를 생성할 때 넘겨주어야할 인자값은 생성자의 매개변수인 name과 age 2개가 되는 것 입니다.

생성자 오버로딩

dog = Animal()

그렇다면 같은 클래스를 사용하여 dog라는 객체를 생성하고 있습니다.
하지만 생성자에게 아무런 값도 넘겨 주지 않고 있습니다. 분명 필요한 생성자의 매개변수는 2개인데 말이죠.

그 이유는 생성자에 디폴트 매개변수를 사용했기 때문입니다. 디폴트 매개변수 덕분에 생성자는 자동으로 None이 들어간 name과 age를 넘겨 받게됩니다.

오버로딩 : 같은 클래스내에서 같은 이름의 매서드를 사용하는 것

조건 : 매개변수 타입이 달라야 함 OR 매개변수 개수가 달라야 함.

소멸자

def __del__(self):
        print("{}가 없어졌어요!" .format(self.name))

이 부분이 소멸자 부분이며 __del__함수를 클래스 내에서 정의하면 소멸자로 인식됩니다.

del cat

메인에서 생성된 객체를 del명령어로 삭제할 수 있습니다.
객체가 삭제될 때, 소멸자가 자동으로 호출됩니다.
소멸자역시 생성자와 마찬가지로 따로 정의를 내리지 않더라도 기본 소멸자 즉, 아무런 내용이 없는 소멸자가 자동으로 정의되어 호출됩니다.

반응형

'코딩 > Python!' 카테고리의 다른 글

함수 [Python]  (0) 2018.07.20
NumPy 배열 생성, max(), min() [Python]  (0) 2018.06.08
재귀함수 [Python]  (0) 2018.06.06
2차 리스트 [Python]  (0) 2018.05.28
리스트 [Python]  (0) 2018.05.11