갬미의 성장일기

[Python] class 본문

Algorithm/Python 문법

[Python] class

갬미 2022. 1. 7. 15:02

class 생성시 이름은 항상 대문자로 시작

인스턴스 = 클래스를 받는 변수

메서드 = 함수

속성 = 클래스의 변수

클래스 __init__ 함수 

- 인스턴스를 생성할때 자동으로 실행되는 매직 메서드 (magic method) 스페셜 메서드(special method)라고도 함

- 그냥 할당하면 자동으로 생성 됨

- 여기서 만든 변수는 클래스 내 다른 메서드에서도 사용 가능 (클래스를 만듦과 동시에 실행 되기 때문)

class Customer:
    def __init__(self, name, house, address):
        self.name = name
        self.house = house
        self.address = address
        
    def join (self):
        print (self.address, '에 사는', self.house, self.name, '님이 카카오 뱅크에 가입하셨습니다.')
        
    def loarn_require(self):
        print (self.name, '님이 대출을 신청했습니다')
hong = Customer('홍길동', '자가', '역삼동')
hong.join()

이때 인스턴스 생성시 name, house, address 지정 안해주면 오류 남

__init__ 말고 클래스 다른 메서드에서 속성 지정하는 경우

class Customer2:
    def __init__(self, name):
        self.name = name
        
    def join (self, name, house, address):
        self.name = name
        self.house = house
        self.address = address
        print (self.address, '에 사는', self.house, self.name, '님이 카카오 뱅크에 가입하셨습니다.')
        
    def loarn_require(self):
        print (self.name, '님이 대출을 신청했습니다')
        print (self.address, '님이 대출을 신청했습니다')
hong = Customer2('홍길동')
hong.join('홍길동', '자가', '역삼동')

인스턴스 생성시 name 지정 안하면 오류, join 함수 사용할 때 house, address 지정 안하면 오류 

__init__ 에서 지정한 속성을 사용할때 vs 다른 메서드에서 지정한 속성을 사용할때

loarn_require() 메서드에서 사용할 수 있는 속성은 ? - name

loarn_require() 메서드에서 address 사용하고 싶다면?

- address 를 사용하는 다른 메서드 먼저 호출하고 그 다음에 호출하기

- loarn_require() 메서드에서 address 지정 받기

정리

  1. class 인스턴스 생성시 자동으로 호출되는 함수 (메서드) == __init__
    1. 따라서 init에 지정된 속성은 인스턴스 생성시 지정해줘야 함
    2. 이 속성들은 클래스 내에서 자유롭게 사용
  2. __init__ 써도 되고 안써도 된다
  3. 메서드에서 사용하고자 하는 속성
    1. 해당 메서드에서 속성을 지정하지 않았다면 
      1. 이 메서드를 사용하기 전에 그 속성을 사용하는 메서드를 먼저 실행한다
      2. __init__에 지정
    2. 메서드에서 지정
Comments