now is better than never
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 13강 ~ 14강 - 클래스, 상속 1 본문
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 13강 ~ 14강 - 클래스, 상속 1
김초송 2022. 10. 22. 00:38Class
- 변수와 함수를 묶어놓은 개념
- 클래스와 선언
- 변수와 함수를 클래스 안에서 선언
- 클래스를 객체로 만들어서 클래스 안의 변수와 함수를 사용
Basic class
1. Class 선언
- class 안에 여러 개 함수 선언하고 필요할 때마다 호출
- 객체 지향 = 모든 것을 변수화
- 함수명은 CamelCase(대문자 구분)로 작성
- 클래스 안에서 선언한 변수는 local 변수
- 변수 = 클래스()
-> 클래스 인스턴스화: 새로운 변수에 클래스를 담아두는 것
- .을 통해 클래스의 변수, 메소드에 접근해서 사용
2. Self
- 객체 자신
- 어떤 변수에 클래스가 선언되면 호출되는 함수들의 self는 모두 변수로 바뀜!
3. 생성자, 소멸자
- 클래스의 인스턴스 객체가 생성/소멸될 때 자동으로 호출되는 메소드, 선언과 동시에 실행됨
- 생성자: __init__(self)
- 소멸자: __del__(self)
class Account:
def __init__(self):
self.loan = 0
self.deposit = 0
print("계좌가 개설되었습니다.")
def save(self, money):
self.deposit += money
print("현재 계좌 잔액은 {}원 입니다.".format(self.deposit))
def withdraw(self, money):
self.deposit -= money
print("인출 금액은 {}원 입니다. 현재 계좌 잔액은 {}원 입니다.".format(money, self.deposit))
def debt(self, d_money):
self.deposit += d_money
self.credit_debt = d_money + self.loan
return -int(self.credit_debt)
# 인스턴스화한 변수가 삭제되는 순간 실행
def __del__(self):
print("계좌가 해지되었습니다. 이용해주셔서 감사합니다.")
acc3 = Account()
# 계좌가 개설되었습니다 출력
del acc3
# 계좌 해지~
Class 상속
- 상속 : 상위 클래스의 모든 내용을 그대로 가지고 와서 개량
- 클래스가 가지고 있는 멤버나 메소드를 상속받는 클래스가 모두 사용
- 상속을 해주는 클래스 = 부모 클래스 = 슈퍼 클래스
- 상속을 받는 클래스 = 자식 클래스 = 서브 클래스
1. 부모 클래스로 상속받기
- class 자식 클래스(부모 클래스)
class Stock(Account):
pass
stock = Stock()
# 계좌가 개설되었습니다 출력
2. Overiding
- 부모로부터 상속받은 클래스의 기능들을 수정하거나 대체
class Stock(Account):
# 새로운 기능 추가
def trading(self, buy, sell):
self.deposit -= buy
self.deposit += sell
if buy and not sell:
print("매수 금액 : {}원. 현재 계좌 잔액 : {}원".format(buy, self.deposit))
else:
print("매도 금액 : {}원. 현재 계좌 잔액 : {}원".format(sell, self.deposit))
- __init__(self, parameter)
-> 클래스가 객체로 생성될 때 파라미터를 설정하면 생성 시 argument를 넣어 생성할 수 있음
- 생성자에서 파라미터를 설정했다면 반드시 객체화할 때 argument 넣어야 함 (아니면 defaul 값 설정해야 함)
class Employee:
mileage = 0
rate = round(1/15,2)
def __init__(self, first, last, salary):
print("입사를 축하합니다.")
self.first = first
self.last = last
self.salary = salary
self.id = first.lower() + last.lower() + "@euc.com"
self.mileage = 100_000
def save_mileage(self, point):
self.mileage += int(point + (self.salary)*self.rate)
print("추가 포인트는 {}점, 누적 마일리지는 {}점 입니다".format(point, self.mileage))
emp = Employee('gildong','hong', 1_000)
emp.save_mileage(10_000)
emp.rate
3. Mangling
- Employee.rate는 원래 Employee 클래스의 rate
- emp2의 객체에서 self로 적용된 변수들은 emp2에서만 적용됨
- Employee와 전혀 다른 클래스 객체
- Employee().rate = 로 바꾸면 (객체가 아닌) 클래스 rate가 변함
class Employee:
mileage = 0
rate = round(1/15,2)
def __init__(self, first, last, salary):
print("입사를 축하합니다.")
self.first = first
self.last = last
self.salary = salary
self.id = first.lower() + last.lower() + "@euc.com"
self.mileage = 100_000
def save_mileage(self, point):
# self.rate -> Employee.rate
self.mileage += int(point + (self.salary) * Employee.rate)
print("추가 포인트는 {}점, 누적 마일리지는 {}점 입니다".format(point, self.mileage))
emp2 = Employee('mugae','ah',1_000)
emp2.rate=0.7
# emp2의 rate 값은 바뀌었지만 self 가 아니기 때문에 Employee 클래스의 rate 값 적용
emp2.save_mileage(10_000)
- Mangling : 클래스 변수에 접근할 수 없도록 설정하는 방법
- 변수명 앞에 __를 붙여서 사용
- 클래스 내에서 선언한 순간 접근, 변경 불가능
class Employee:
mileage = 0
rate = round(1/15,2)
def __init__(self, first, last, salary):
print("입사를 축하합니다.")
self.first = first
self.last = last
self.salary = salary
self.id = first.lower() + last.lower() + "@euc.com"
self.mileage = 100_000
self.__rate = round(1/15,2)
def save_mileage(self, point):
self.mileage += int(point + (self.salary)*self.__rate)
print("추가 포인트는 {}점, 누적 마일리지는 {}점 입니다".format(point, self.mileage))
emp = Employee('gildong','hong', 1_000)
emp.rate = 0.7
emp.__rate = 0.7
Employee.rate = 0.7
Emplyee.__rate = 0.7
# 모두 0.7이라고 뜨지만
emp.save_mileage(10_000)
# 실행하면 결과 값의 rate는 0.07
상속 받을 때 슈퍼 클래스 __init__에서 생성자 모두 다시 써줘야함
'Python > 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정' 카테고리의 다른 글
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 17강 - Quiz (0) | 2022.10.25 |
---|---|
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 16강 - 예외처리 (0) | 2022.10.25 |
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 15강 - 클래스, 상속 2 (0) | 2022.10.24 |
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 10강 ~ 12강 (0) | 2022.10.21 |
[easyupclass] 초심자를 위한 빅데이터 분석 및 머신러닝 응용과정(파이썬) 2강 ~ 4강 (0) | 2022.10.19 |