객체지향 (생성자와 소멸자 메서드)

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

4. 예제로 이해하는 객체지향 문법 (생성자와 소멸자 메서드)

  • 생성자는 객체 생성시 자동 호출, 소멸자는 객체 소멸시 자동 호출

생성자: __init__(self)

  • method 이므로 첫 번째 인자는 self로 설정
  • 생성자에서는 보통 해당 클래스가 다루는 데이터를 정의

이전에 다음과 같이 attribute 선언해보았음

In [44]:
class Quadrangle:
    width = 0
    height = 0
    color = "black"
In [43]:
square = Quadrangle()
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다

다음과 같이 클래스에서 self.attribute명을 사용할 수는 없음 (self는 객체를 나타냄)

In [45]:
class Quadrangle:
    self.width = 0
    self.height = 0
    self.color = "black"
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-45-c2dd94dcbb71> in <module>()
----> 1 class Quadrangle:
      2     self.width = 0
      3     self.height = 0
      4     self.color = "black"

<ipython-input-45-c2dd94dcbb71> in Quadrangle()
      1 class Quadrangle:
----> 2     self.width = 0
      3     self.height = 0
      4     self.color = "black"

NameError: name 'self' is not defined

생성자에서 해당 클래스가 다루는 데이터를 정의하는 경우도 많음

한줄씩 보며 이해하는 객체!

In [46]:
class Quadrangle:
    def __init__(self, width, height, color):
        self.width = width
        self.height = height
        self.color = color
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [47]:
square = Quadrangle()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-34362c3785a3> in <module>()
----> 1 square = Quadrangle()

TypeError: __init__() missing 3 required positional arguments: 'width', 'height', and 'color'
In [51]:
square = Quadrangle(5, 5, "black")
In [52]:
square.width
Out[52]:
5

소멸자: __del__(self)

  • method 이므로 첫 번째 인자는 self로 설정
  • 클래스 소멸시 호출
In [49]:
class Quadrangle:
    def __init__(self, width, height, color):
        self.width = width
        self.height = height
        self.color = color

    def __del__(self):
        print("Quadrangle object is deleted")        
square = Quadrangle(5, 5, "black")
Quadrangle object is deleted
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
  • 객체 삭제 문법
    • del 객체명
In [50]:
del square
Quadrangle object is deleted
초간단 연습3
* 정삼각형 클래스를 만들고, 정삼각형 이름하기
- attribute: 정삼각형 한 변의 길이, 삼각형 이름
- method: 정삼각형 이름 리턴
- 생성자에서 attribute 값 설정
- 소멸자작성 후, 객체 소멸시 object is deleted 출력
In [57]:
import math

class Figure:
    def __init__(self, length, name):
        self.length = length
        self.name = name

    def get_area(self):
        return (math.sqrt(3) / 2) * self.length**2  # (math.sqrt(3) / 2) * math.pow(self.length, 2) 도 가능함 

    def get_name(self):
        return self.name
    
    def __del__(self):
        print ('object is deleted')
        
square = Figure(10, 'dave')
print (square.get_area(), square.get_name())
object is deleted
86.60254037844386 dave
한발짝 더 나가보기!(심화 문제)
* 정삼각형 클래스를 만들고, 너비 출력하기
- attribute: 정삼각형 한 변의 길이, 삼각형 이름
- method: 정삼각형 너비 리턴
- 힌트: 정삼각형 한 변의 길이를 self.length 라고 할 때, 다음 식은 (math.sqrt(3) / 2) * self.length**2 와 같이 작성 가능 (import math 선언 후) $$ \frac{\sqrt{3}}{2} * 정삼각형 한변의 길이^2 $$
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [22]:
# 한발짝 더 나가보기!(심화 문제)
# 정삼각형 클래스를 만들고, 너비 출력하기
import math

class Quadrangle:
    def __init__(self, length):
        self.length = length

    def get_area(self):
        return (math.sqrt(3) / 2) * self.length**2  # (math.sqrt(3) / 2) * math.pow(self.length, 2) 도 가능함 

square = Quadrangle(10)
square.get_area()
Out[22]:
86.60254037844386