매번 붕어빵 틀로 단팥이 들어간 붕어빵과 슈크림이 들어간 붕어빵을 만들며 클래스를 설명해 주시던 대학교 2학년 때 교수님을 떠올리며 복습을 해봅니다. (아련)
왜 맨날 헷갈리니! 파이썬 클래스.. 이제는 잘 기억해 보자!
class 클래스이름:
def 메서드(self):
코드
#예시 클래스
class Person:
def greeting(self):
print('Hello')
클래스에 ()(괄호)를 붙인 뒤 변수에 할당한다.
james = Person()
클래스는 특정 개념을 표현할 뿐,
사용하기 위해선 인스턴스를 꼭 생성해야 한다.
메서드는 인스턴스를 통해 호출한다.
james.greeting() #Hello
위와 같이 인스턴스를 통해 호출되는 메서드를 인스턴스 메서드라고 한다.
self.메서드() 형식으로 호출한다.
self없이 메서드 이름만 사용하면 클래스 바깥쪽에 있는 함수를 호출한다는 뜻이 된다.
Class Person:
def greeting(self):
print('Hello')
def hello(self):
self.greeting()
james = Person()
james.hello()
속성을 만들 때는 __init__
메서드 안에 self.속성에 값을 할당한다.
class 클래스이름:
def __init__(self):
self.속성 = 값
사용예시
class Person:
def __init__(self):
self.hello = '안녕하세요.'
def greeting(self):
print(self.hello)
james = Person()
james.greeting() #안녕하세요.
__init__
메서드는 james=Person()
처럼 클래스에 괄호를 붙여서 인스턴스를 만들 때 호출되며 인스턴스를 초기화하는 특별한 메서드이다. self
는 인스턴스 자기 자신을 의미한다.class 클래스이름:
def __init__(self, 매개변수1, 매개변수2):
self.속성1 = 매개변수1
self.속성2 = 매개변수2
사용 예시
class Person:
def __init__(self, name, age, address):
self.hello = '안녕하세요.'
self.name = name
self.age = age
self.address = address
def greeting(self):
print('{0} 저는 {1}입니다.'.format(self.hello, self.name))
maria = Person('마리아', 20, '서울시 서초구 반포동')
maria.greeting() #안녕하세요 저는 마리아입니다.
print('이름:', maria.name)
print('나이:', maria.age)
print('주소:', maria.address)
__init__
메서드에서 self뒤에 있는 매개 변수에 차례대로 들어간다.self.속성
인스턴스.속성
클래스로 인스턴스를 만들 때 위치 인수와 키워드 인수를 사용할 수 있다.
① 위치 인수와 리스트 언패킹 사용법
*args
를 사용args[0]
처럼 사용Class Person:
def __init__(self, *args):
self.name = args[0]
self.age = args[1]
self.address = args[2]
maria = Person(*['마리아',20,'서울시 서초구 반포동'])
② 키워드 인수와 딕셔너리 언패킹 사용법
**kwargs
사용kwargs['name']
처럼 사용class Person:
def __init__(self, **kwargs): #키워드인수
self.name = kwargs['name']
self.age = kwargs['age']
self.address = kwargs['address']
maria1 = Person(name='마리아', age=20, address='서울시 서초구 반포동')
maria2 = Person(**{'name': '마리아', 'age':20, 'address':'서울시 서초구 반포동'})
속성에는 클래스 속성와 인스턴스 속성 2가지 종류가 있다.
__init__
메서드에서 만들었던 속성은 인스턴스 속성이다.
클래스 속성은 클래스에 바로 속성을 만들면 된다.
def 클래스 이름:
속성 = 값
사용예시
class Person:
bag = []
def put_bag(self, stuff):
self.bag.append(stuff)
james = Person()
james.put_bag('책')
maria = Person()
maria.put_bag('열쇠')
print(james.bag) #['책','열쇠']
print(maria.bag) #['책','열쇠']
클래스 속성은 클래스에 속해 있으며 모든 인스턴스에서 공유한다.
class Person:
bag = []
def put_bag(self, stuff):
Person.bag.append(stuff) #클래스 이름으로 클래스 속성 접근
print(Person.bag) #클래스 바깥에서도 클래스 이름으로 클래스 속성에 접근
class 기반클래스이름:
코드
class 파생클래스이름(기반클래스이름):
코드
사용예시
class Person:
def greeting(self):
print('안녕하세요.')
class Student(Person):
def study(self):
print('공부하기')
james = Student()
james.greeting() #안녕하세요: 기반 클래스 Person의 메서드 호출
james.study() #공부하기: 파생 클래스 Student에 추가한 study 메서드
class Student(Person):
과 같이 괄호 안에 기반 크랠스인 Person 클래스를 넣으면, Person 클래스의 기능을 물려받은 Student 클래스가 된다.class Person:
def greeting(self):
print('안녕하세요.')
class Student(Person):
def study(self):
print('공부하기')
class Person:
def greeting(self):
print('안녕하세요.')
class PersonList():
def __init__(self):
self.person_list = [] #리스트 속성에 Person인스턴스를 넣어서 관리
def append_person(self, person): #리스트 속성에 Person인스턴스를 추가하는 함수
self.person_list.append(person)
class Person:
def __init__(self):
print('Person __init__')
self.hello = '안녕하세요'
class Student(Person):
def __init__(self):
print('Student __init__')
super().__init__() #super()로 기반 클래스의 __init__ 메서드를 호출한다.
self.school = '파이썬 코딩 도장'
james = Student()
print(james.school)
print(james.hello)
__init__
메서드를 호출하고 싶을 때는 super().메서드()
를 사용한다.__init__
메서드가 없다면, 부모 클래스의 __init__
이 자동으로 호출되기 때문에 super()
는 생략될 수 있다.✔ 오버라이딩(overriding)
오버라이딩은 무시하다, 우선하다는 뜻을 가지고 있으며 기반 클래스의 메서드를 무시하고 새로운 메서드를 만든다는 의미이다.
class Person:
def greeting(self):
print('안녕하세요')
class Student(Person):
def greeting(self):
print('안녕하세요. 저는 파이썬 코딩 도장 학생입니다.')
james = Student()
james.greeting() #안녕하세요. 저는 파이썬 코딩 도장 학생입니다.
오버라이딩 잘 사용하기
class Person:
def greeting(self):
print('안녕하세요')
class Student(Person):
def greeting(self):
super().greeting()
print('저는 파이썬 코딩 도장 학생입니다.')
james = Student()
james.greeting()
기반 클래스의 메서드를 재활용하여 중복되는 문구를 줄일 수 있다. (super()
사용)
다중 상속은 여러 기반 클래스로부터 상속을 받아서 파생 클래스를 만드는 방법이다.
class 기반클래스이름1:
코드
class 기반클래스이름2:
코드
class 파생클래스이름(기반클래스이름1, 기반클래스이름2):
사용예시
class Person:
def greeting(self):
print('안녕하세요')
class University:
def manage_credit(self):
print('학점 관리')
class Undergraduate(Person, University):
def study(self):
print('공부하기')
james = Undergraduate()
james.greeting() #안녕하세요 : 기반 클래스 Person의 메서드 호출
james.manage_credit() #학점 관리: 기반 클래스 University의 메서드 호출
james.study() #공부하기: 파생 클래스 Undergraduate에 추가한 study 메서드
⨳ 참고
파이썬 코딩 도장 UNIT34~36