[TIL] 파이썬 기초 - 클래스, 상속, 상관분석
by Holly Yoon
1. 클래스
- 변수, 함수를 묶어서 코드를 작성하는 방법으로 객체 지향을 구현하는 문법
- 클래스 사용법 : 클래스 선언(코드 작성) > 객체 생성(메모리 사용) > 메서드 실행(코드 실행)
- 식별자 컨벤션 : (변수, 함수) snake_case, (클래스) PascalCase, UpperCamelCase
- 데이타를 표현하는 속성(attribute)과 행위를 표현하는 메서드(method)를 포함하는 논리적인 컨테이너
# 클래스선언 : 코드작성
# 계산기 설계 : Calculator : number1, number2, plus(), minus()
class Calculator:
number1, number2 = 1, 2
def plus(self):
return self.number1 + self.number2
def minus(self):
return self.number1 - self.number2
# 객체생성 : 메모리사용
calc1 = Calculator()
calc2 = Calculator()
# 메서드실행 : 코드실행
calc1.plus(), calc1.minus()
>> (3,-1)
2. Self 개념
- 인스턴스 메서드는 인스턴스 변수에 엑세스할 수 있도록 메서드의 첫번째 파라미터에 항상 객체 자신을 의미하는 "self"라는 파라미터를 갖는다.
- 인스턴스 변수는 클래스 내부에서는 self.width 과 같이 "self." 을 사용하여 엑세스하고, 클래스 밖에서는 "객체변수.인스턴스변수"와 같이 엑세스 한다.
#클래스 선언
class Account:
balance=0
#입금
def insert(self, amount):
self.balance += amount
#출금
def withdraw(self, amount):
if self.balance >= amount:
self.balance -= amount
else:
print(f'잔액이 {amount-self.balance}원 부족합니다.')
#객채 생성
account = Account()
account.balance
>>0
#메서드 실행
account.insert(1000)
>>1000
- Special Method : __del__, __add__, __sub__, __cmp__, __str__(문자열을 객체로 표현)
- Class는 사용자 정의 데이터 타입이다.
- list 클래스는 우리가 만들지 않아도 파이썬에서 제공해준다.
- 데이터 타입의 메서드는 암기할 필요가 없다. dir() 종류 확인 / help() 설명 확인
data=[1,2,3]
type(data)
>>list
[var for var in dir(data) if var[0] != '_']
>>'append',...
help(data.pop)
3. 데이터 타입과 연산
- 데이터 타입에 따라 수행되는 연산이 다르다. (=같은 연산자를 사용하더라도 결과 값이 다르다.)
d1, d2, d3, d4 = 1, 2, '3', '4'
d1 + d2, d1.__add__(d2), d3 + d4, d3.__add__(d4)
>> (3, 3, '34', '34')
- 덧셈연산을 하지만, 뺄셈연산이 수행되는 객체를 생성해보자
# 덧셈연산을 하지만 뺄셈연산이 수행되는 객체를 생성
class Number:
def __init__(self, data):
self.data = data
#뺄셈이 되도록
def __add__(self, obj):
return self.data - obj.data
#print()하더라도 본인이 나오도록
def __str__(self):
return str(self.data)
#n1, n2하더라도 본인이 나오게
def __repr__(self):
return str(self.data)
4. 상속
- 다른 클래스의 변수(메서드)를 가져와서 사용하는 방법
class iPhone1:
def call(self):
print('calling!')
class iPhone2(iPhone1):
def send_msg(self):
print('send_msg!')
class iPhone3(iPhone2):
def call(self):
print('video calling!')
def internet(self):
print('internet!')
- 다중 상속
class Human:
def walk(self):
print('walking!')
class Korean:
def eat(self):
print('eat kimchi!')
class Indian:
def eat(self):
print('eat curry!')
# Human > Korean > Jin 순으로 실행된다
class Jin(Korean, Human):
def skill(self):
print('coding')
5. 데코레이터
- 함수에서 중복된 코드를 데코레이터 함수로 만들어 코드를 작성한다.
# 패스워드를 맞춰야 함수의 실행이 가능하도록 하는 데코레이터 작성
def admin(func):
def wrapper(*args, **kwargs):
pw = input('insert password : ')
if pw == 'python': # 패스워드 맞음
result = func(*args, **kwargs)
else: # 패스워드 맞지 않음
result = 'wrong password!'
return result
return wrapper
def plus(n1, n2):
return n1 + n2
@admin
def minus(n1, n2):
return n1 - n2
minus(1,2)
>>패스워드가 'python'이 아니면 실행이 안됨
6. 상관계수
- 공분산(방향성o), 상관계수(방향성o, 강도o), 결정계수(강도o)
- 결정계수는 모델 성능 평가에 활용된다.
- 패키지를 단순히 가져다가 모델을 만드는 것은 경쟁력이 없다.
- 계산량이 많은 것은 C언어로 구현 -> 파이썬 패키지로 구성하는 식으로 모델링을 해보는 연습 필요.
# 공분산 // - 1 : 자유도
def covariance(x, y):
cov = 0
x_ = sum(x) / len(x)
y_ = sum(y) / len(y)
for xi, yi in zip(x, y):
cov += (xi - x_) * (yi - y_)
return cov / (len(x) - 1)
# 상관계수
def cc(x, y):
cov = covariance(x, y)
var = (variance(x) * variance(y)) ** 0.5
return cov / var
***
첫 번째 파이썬 공부의 난관이라고 생각했던 클래스까지 왔다... ㅎ
복습 많이 필요..
'TIL' 카테고리의 다른 글
[TIL] Pandas 시작하기 (0) | 2023.01.10 |
---|---|
[TIL] 파이썬 기초 수업 끝 - (0) | 2023.01.06 |
[TIL] 파이썬 기초 (함수/파파고 API) (0) | 2023.01.04 |
[TIL] 파이썬 기초 (반복문, 조건문, 조건부확률) (0) | 2023.01.03 |
[TIL] 파이썬 기초 수업 시작 (변수, datatype) (0) | 2023.01.02 |
블로그의 정보
Study Log by Holly
Holly Yoon