[Python] 객체지향 문법2 (생성자와 소멸자 method)
0. 이전 포스트 참고
2020/07/08 - [[파이썬] 정리] - [Python] 객체지향 문법 (class와 object)
[Python] 객체지향 문법 (class와 object)
[Python] 객체지향 문법 (class와 object) 1. Class 선언 & attributes추가 1.1. 총 4개의 attributes (Mon, Tue, Wed, Thu)를 넣어주었다. 월요일은 가슴운동, 화요일은 등운동, 수요일은 하체운동, 목요일은..
speedy-hand.tistory.com
- 이전 포스트에서 다루었던 class 내에서는 self.속성명을 사용할 수 없었다.
Input:
class Routine():
self.Mon = '가슴'
self.Tue = '등'
self.Wed = '하체'
self.Thu = '어깨'
Output:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-96-f6ee7331d0db> in <module>()
----> 1 class Routine():
2 self.Mon = '가슴'
3 self.Tue = '등'
4 self.Wed = '하체'
5 self.Thu = '어깨'
<ipython-input-96-f6ee7331d0db> in Routine()
1 class Routine():
----> 2 self.Mon = '가슴'
3 self.Tue = '등'
4 self.Wed = '하체'
5 self.Thu = '어깨'
NameError: name 'self' is not defined
- 그렇다면 클래스 내에서 self.속성명을 사용하려면 어떻게 해야할까?
- 이에 대한 해결책으로 생성자를 사용한다.
1. 생성자 : __init__(self)
1.1. 총 4개의 attributes (Mon, Tue, Wed, Thu)를 넣어주었다.
- 월요일, 화요일, 수요일, 목요일 각각 무슨 운동을 하는지는 결정 되지 않게 모르는 파라미터로서 속성을 넣어주었다.
- 어떠한 arguments도 필요없었던, 생성자가 없었던 이전 포스트와는 달리 객체를 선언시에 Routine() 내에 arguments를 라인7과 같이 모두 작성해주어야 한다.
- 생성자 역시도 메소드이므로 첫 파라미터는 역시 self로 지정하는 것을 잊지 않는다.
Input:
class Routine():
def __init__(self,Mon,Tue,Wed,Thu):
self.Mon = Mon
self.Tue = Tue
self.Wed = Wed
self.Thu = Thu
R1 = Routine(Mon='등',Tue='가슴',Wed='어깨',Thu='하체')
R1
Output:
<__main__.Routine at 0x7fb048fed518>
- R1이라는 Routine()객체가 생성되었음을 알 수 있다.
1.2. 어떤 atrributes와 method를 가지는지 확인하는 함수 dir()을 적용하였다.
Input:
dir(R1)
Output:
['Mon',
'Thu',
'Tue',
'Wed',
'__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']
- 객체의 attributes를 확인해 볼 수 있었다. 다음은 Mon, Wed 속성들(attributes)에 접근해보자.
1.3. 객체의 attributes에 접근하였다.
Input:
print(R1.Mon)
print(R1.Wed)
Output:
등
어깨
1.4. 객체의 attributes에 값을 대치해줄 수 있다.
이는 생성자가 없던 이전포스트와 마찬가지의 기능이다.
Input:
R1.Mon='하체'
R1.Wed='가슴'
print(R1.Mon)
print(R1.Wed)
Output:
하체
가슴
2. 소멸자 : __del__(self)
2.1. 소멸자 메소드 추가
- 소멸자 역시도 메소드이므로 첫 파라미터는 역시 self로 지정하는 것을 잊지 않는다.
- 객체가 소멸되었을 때, 해당객체가 사라졌다는 문구를 출력하도록 하였다.
Input:
class Routine():
def __init__(self,Mon,Tue,Wed,Thu):
self.Mon = Mon
self.Tue = Tue
self.Wed = Wed
self.Thu = Thu
def __del__(self):
print("Routine() Object is deleted")
R1 = Routine(Mon='등',Tue='가슴',Wed='어깨',Thu='하체')
del R1
Output:
Routine() Object is deleted
'[파이썬] 개념정리 > [파이썬] 구문,문법정리' 카테고리의 다른 글
[Python] 함수와 문자열포매팅 (0) | 2021.01.20 |
---|---|
[Python] list와 str의 슬라이싱(Slicing) (0) | 2020.07.10 |
[Python] 객체지향 문법 (class와 object) (0) | 2020.07.08 |
[Python] 오른쪽(right) 우선 순회 (0) | 2020.07.08 |
[Python] try-except-else-finally (0) | 2020.07.04 |