본문 바로가기
Python

[Python 기초] 파이썬 클래스 - 생성자와 소멸자 (Constructor and Destructor)

by dev수니 2021. 4. 3.
반응형

 

 

 1  생성자


객체를 생성할 때 자동적으로 인스턴스 변수를 초기화하기 위해 호출되는 함수이다.

객체를 생성할 때 초기화를 위해 가장 먼저 실행된다.
생성자를 선언해주지 않아도 실행되며 기본적으로 모든 클래스가 생성자를 1개씩 갖고 있다.

 

 

 

빈 클래스를 만들고 싶을 때

class A:
     
A()   # 에러

위와 같이 코드 작성시 에러가 발생하는 것을 볼 수 있다.

 

 

 

# 따라서 다음과 같이 pass를 작성해준다.

class A:
     pass
A() # 정상적으로 작동

 +plus   pass : 실행 할 것이 아무 것도 없다는 것을 의미한다. 따라서 pass 를 만나게 되면 아무 동작을 하지 않고 다음 코드를 실행한다.

 

 

 

 

 

⊙ 기본 생성자

클래스가 작성할 때 컴파일러가 자동으로 생성해주는 함수이다. 형태는 다음과 같고 이는 생략이 가능하다.

class 변수명:
     def __init__(self):
          pass

# 여기서 self는 객체 자신을 의미하며 생성자 정의 시 첫번째 파라미터에 넣어줘야한다.
# 다른 이름으로 사용해도 되지만 관례적으로 self를 사용한다.

 

 

 

++ 메서드 호출방식으로 bound와 unbound 방식이 있다.

메서드를 정의할 때 self가 자동으로 bounding되어 있느냐의 차이로 매개변수에 self 이외의 변수가 필요로 하면 unbound 방식, 필요가 없다면 bound 방식이다.

 

 

 

 

 

 

 

 

생성자를 이용해서 인스턴스 변수 생성 예금계좌명, 계좌번호 , 잔액, 비밀번호
# 입금, 출금, 예금조회

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Account:
     def __init__(self,name,num,money,pw):
          self.acc_name = name
          self.acc_num = num
          self.acc_balance = money
          self.acc_pw = pw
          print("계좌개설ok")
               
     def with1(self,money):    # 출금
          if money <= self.acc_balance:
               self.acc_balance -= money
               return money
          else:
               return "잔액부족"
 
     def posit(self,money):   # 입금
          self.acc_balance += money
          print("입금액:",money)
                
# 영희 계좌
yunghee = Account("yunghee","1111-1111",10000,1234)
 
print(yunghee.acc_name)
yunghee.posit(20000)
print("출금 :",yunghee.with1(50000))
cs

 

 

 

 


 

 

 2  소멸자

 

객체를 소멸(삭제)할 때 호출되는 메서드로 다음과 같이 사용한다.

1
2
3
4
5
6
7
8
9
class B:
     def __init__(self):
          print("객체생성")
     def __del__(self):
          print("객체소멸")
 
b1 = B()
del b1    # del 이용해서 지우면 객체 소멸 출력
          # 만약 del메서드 내에 pass로 입력했으면 아무것도 출력X
cs

def __del__ 로 선언 후 클래스 외부에서 del 을 이용해 객체를 소멸시켜줄 수 있다.

 

 

 

 


 

 

 

 

반응형

댓글