예시 코드
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 |