[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

 

+ Recent posts