<5-1주차 수강 클립>
01. Python Programming 기초
28. 클래스와 인스턴스 - 04. self 키워드의 이해 및 사용하기
29. 클래스와 인스턴스 - 05. method, static method 정의 및 사용하기
30. 클래스와 인스턴스 - 06. 클래스 상속의 이해 (코드를 재사용하기 2)
이번 주차에는 클래스 내의 메소드와 변수를 배울 때 등장하는 개념인
'self' 키워드에 대해 알아보는 시간을 가졌습니다.
또한 코드를 재사용하는 대표적인 방법인 클래스 상속 개념이 처음 등장하네요 !
>>수강 인증샷<<
28. 클래스와 인스턴스 - 04. self 키워드의 이해 및 사용하기
-self
파이썬의 메소드는 항상 첫번째 인자로 'self'를 전달함
self는 현재 해당 메소드가 호출되는 객체 자신을 가리킴 (C++, C#, Java에서의 'this'에 해당)
*) 이름이 self일 필요는 없으나, 위치는 항상 맨 처음의 parameter이며 관례적으로 self를 사용
-메소드 정의
메소드=멤버함수
해당 클래스의 객체(object)에서만 호출 가능
메소드는 객체 레벨에서 호출되며 해당 객체의 속성(멤버 변수)에 대한 연산을 행함
클래스의 데이터들을 다루고자 할 때 메소드를 정의
# 기능1. 숫자를 하나 증가
# 기능2. 숫자를 0으로 초기화
class Counter:
def __init__(self):
self.num = 0
def increment(self):
self.num += 1
def reset(self):
self.num = 0
def print_current_value(self):
print('현재 값: ', self.num)
c1 = Counter()
c1.print_current_value()
c1.increment()
c1.increment()
c1.print_current_value()
c1.reset()
c1.print_current_value()
c2 = Counter()
c2.increment()
c2.print_current_value()
29. 클래스와 인스턴스 - 05. method, static method 정의 및 사용하기
-메소드 타입
1. instance method: 객체로 호출
메소드는 객체 레벨로 호출되기 때문에 해당 메소드를 호출한 객체(클래스로부터 만들어진 구체적인 인스턴스, 메모리상에서 공간을 차지함)에만 영향을 미침
2. class method(혹은 static method): 클래스로 호출
클래스 메소드의 경우 클래스 레벨로 호출되기 때문에 클래스 멤버 변수만 변경 가능
*) 주로 utility성 클래스에 대해 class method가 사용됨 (어떠한 기능들을 하나의 단위로 묶고싶을 때 그 기능들이 내부적인 속성을 유지할 필요가 없다면 클래스 메소드로!)
클래스 내부에 데이터를 유지하지 않는 즉, 속성이 없는 클래스는 인스턴스 레벨의 메소드를 생성할 필요가 없음 → 전달된 데이터를 가공해 값을 반환하기만 하는 메소드의 경우 대부분 static method라고 명시해줌 (데코레이터 이용_@)
class Math:
#instacne method 아닌 static method로 동작
#클래스 이름으로 이 함수 호출 가능 (객체 생성해서 호출할 필요 x)
@staticmethod
#def add(self, a, b):
def add(a, b):
return a + b
@staticmethod
#def mult(self, a, b):
def mult(a, b):
return a * b
# m = Math()
# m.add(10, 20)
# m.mult(10, 20)
Math.add(10, 20)
Math.mult(10, 20) #클래스 이름으로 호출
30. 클래스와 인스턴스 - 06. 클래스 상속의 이해 (코드를 재사용하기 2)
-클래스 상속 (Class Inheritance)
기존에 정의해 둔 클래스의 기능과 속성을 그대로 물려받을 수 있음
기존 클래스에 기능 일부를 추가하거나(super), 변경하여(override) 새로운 클래스를 정의함
코드 재사용이 가능!
1. 상속받고자 하는 대상인 '기존 클래스': Parent, Super, Base class 라고 부름
2. 상속 받는 '새로운 클래스': Child, Sub, Derived class 라고 부름
의미적으로 is-a relationship 임! (상속 받은 클래스 is a 상속한 클래스)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print('{}은 {}을(를) 먹습니다.'.format(self.name, food))
def sleep(self, minute):
print('{}은 {}분동안 잡니다.'.format(self.name, minute))
def work(self, minute):
print('{}은 {}분동안 일을 합니다.'.format(self.name, minute))
#class Derived class(Base class):
class Student(Person): #Person이 갖는 모든 기능(메소드)을 가짐
def __init__(self, name, age):
self.name = name
self.age = age
class Employee(Person):
def __init__(self, name, age):
self.name = name
self.age = age
bob = Student('Bob', 25)
bob.eat('BHC')
bob.sleep(30)
bob.work(60)
-메소드 오버라이딩 (method overriding)
부모 클래스의 메소드를 재정의
하위 클래스(=자식 클래스)의 인스턴스로 호출시, 하위 클래스 내에서 재정의된 메소드가 호출됨
오버라이딩 시 부모 클래스의 기능이 사라짐 → 재정의하는 순간 상속받아온 클래스의 기능은 호출할 수 없음
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print('{}은 {}을(를) 먹습니다.'.format(self.name, food))
def sleep(self, minute):
print('{}은 {}분동안 잡니다.'.format(self.name, minute))
def work(self, minute):
print('{}은 {}분동안 일합니다.'.format(self.name, minute))
class Student(Person):
def __init__(self, name, age):
self.name = name
self.age = age
#같은 이름의 메소드가 부모 클래스에도 존재, 구현부는 다름
def work(self, minute):
print('{}은 {}분동안 공부를 합니다.'.format(self.name, minute))
class Employee(Person):
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute):
print('{}은 {}분동안 업무를 합니다.'.format(self.name, minute))
#Person 객체
bob = Person('Bob', 25)
bob.eat('BHC')
bob.sleep(30)
bob.work(60)
#Student 객체
bob = Student('Bob', 25)
bob.eat('BHC')
bob.sleep(30)
bob.work(60)
#Employee 객체
bob = Employee('Bob', 25)
bob.eat('BHC')
bob.sleep(30)
bob.work(60)
-super
하위 클래스(=자식 클래스)에서 상위 클래스(=부모 클래스)의 메소드를 호출할 때 사용
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print('{}은 {}을(를) 먹습니다.'.format(self.name, food))
def sleep(self, minute):
print('{}은 {}분동안 잡니다.'.format(self.name, minute))
def work(self, minute):
print('{}은 {}분동안 준비를 합니다.'.format(self.name, minute))
class Student(Person):
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute):
#하위 클래스에서 부모 클래스의 메소드 기능 이용 + 추가적인 기능 구현
super().work(minute)
print('{}은 {}분동안 공부를 합니다.'.format(self.name, minute))
class Employee(Person):
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute):
super().work(minute)
print('{}은 {}분동안 업무를 합니다.'.format(self.name, minute))
#Employee 객체
bob = Employee('Bob', 25)
bob.eat('BHC')
bob.sleep(30)
bob.work(60)
강의 링크: https://bit.ly/3cB3C8y
'코딩 > 머신러닝&데이터 분석 강의' 카테고리의 다른 글
[머신러닝 인강] 6-1주차: 정규표현식 (0) | 2021.03.26 |
---|---|
[머신러닝 인강] 5-2주차: 클래스와 인스턴스, 정규표현식 (0) | 2021.03.21 |
[머신러닝 인강] 4-2주차: 클래스와 인스턴스 (0) | 2021.03.14 |
[머신러닝 인강] 4-1주차: lambda 함수의 이해, 파이썬 모듈 (0) | 2021.03.12 |
[머신러닝 인강] 3-2주차: 함수 이해 및 활용, 기본 파라미터, 키워드 파라미터 이해, 변수의 스코프 이해 (0) | 2021.03.07 |