일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 머신러닝
- 부스트캠프
- 분산 시스템
- Python
- 추천 시스템
- 데이터 엔지니어링
- codingtest
- Overfitting
- 백준
- 데이터
- recommendation system
- 알고리즘
- 시각화
- SGD
- 프로그래머스
- coursera
- 웹스크래핑
- 협업 필터링
- Cosine-similarity
- Tensor
- wordcloud
- 파이썬
- 코테
- 코딩테스트
- 딥러닝
- 웹크롤링
- selenium
- TF-IDF
- 추천시스템
- pytorch
- Today
- Total
개발자식
[Python] 클래스 (Class) 본문
클래스 (Class)
- 객체를 표현하기 위한 문법, 자료형을 위한 일종의 템플릿
- 객체 지향 언어 : 객체를 사용한 프로그래밍 언어
클래스 정의
class TestClass:
pass
- 클래스 이름 TestClass는 대문자로 작성한다. (PEP 8 Style Guide for Python Code 권고 방식)
+ 함수를 정의할 땐 대문자를 안 쓴다.
인스턴스(객체) 생성
- 어떤 템플릿(클래스)을 불러와서 그걸 다른 이름의 객체로 저장한다.
- 여러 개 인스턴스를 호출하는 것도 가능
test_instance1 = TestClass()
test_instance2 = TestClass()
test_instance3 = TestClass()
type()을 사용하여 어떤 클래스의 인스턴스인지 확인
print(type(test_instance))
# <class '__main__.TestClass'>
- 파이썬에서 __main__은 "현재 실행 중인 파일"을 의미
클래스 변수
- 클래스를 정의할 때 그 안에서 변수를 정의하면 모든 인스턴스에서 동일한 데이터를 사용할 수 있다.
class Restaurant:
food="beef"
guest = Restaurant()
guest1 = Restaurant()
print(guest.food)
print(guest1.food)
- 모두 "beef" 출력됨
메서드
- 클래스 안에서 정의된 함수
- 함수를 정의할 때와 다르게 메서드를 정의할 때 첫 번째 인수를 항상 self로 지정해야 한다.
class Restaurant:
food="beef"
def order(self):
print("I want to eat {}!".format(self.food))
guest = Restaurant()
guest1 = Restaurant()
guest.order()
guest1.order()
- 모두 "I want to eat beef"가 출력된다.
- 함수 안에서 클래스 변수를 사용할 대는 self.food와 같은 형식으로 불러온다.
+다른 인수가 있는 메서드
class Restaurant:
food="beef"
def order(self,add):
print("I want to eat {}! and {} please.".format(self.food,add))
guest = Restaurant()
guest1 = Restaurant()
guest.order("water")
guest1.order("coke")
결과 :
I want to eat beef! and water please.
I want to eat beef! and coke please.
- order 메서드를 정의할 때 필요한 인수를 받기 위해 add를 넣어줬다.
- 메서드의 첫 번째 인수는 self이다.
+ 다른 메서드를 정의하고 여기서 add를 사용하지는 못한다. -> 해결 : self 이용 (인스턴스 변수의 활용)
생성자
- 클래스를 호출할 때 자동으로 어떤 함수를 실행하거나 값을 호출하고 싶을 때 정의한다.
- 메서드 정의할 때와 똑같지만 메서드 이름을 __init__으로 한다.
class Restaurant:
def __init__(self):
print("Excuse me")
guest=Restaurant()
- "Excuse me" 출력
- Restaurant 클래스를 객체로 불러올 때마다 "Excuse me" 출력
- __init__은 클래스 생성과 동시에 실행
클래스를 호출할 때 다른 매개변수를 받는 방식
class Restaurant:
def __init__(self,name):
print("Excuse me {}".format(name))
guest=Restaurant("minju")
- "Excuse me minju" 출력
- 생성자 __init__에서 self 말고 name 인수도 받기 때문에 객체를 생성할 때 괄호 안에 인수를 넣어줘야 한다.
인스턴스 변수
- 각 개체가 클래스 변수와 메서드로만 이루어져 있다면 객체들을 구별해야 할 필요가 없다.
- 클래스를 구별해서 인스턴스를 생성하는 이유는 각 인스턴스가 다른 종류의 데이터인 인스턴스 변수를 보유할 수 있기 때문이다. 관리하기 편하다
- 클래스를 이력서 양식이라고 비유하면 인스턴스는 이력서 데이터이고 이 데이터는 각각 다르며 이를 인스턴스 변수(이름, 성별, 나이 등)로 관리할 수 있다.
- 인스턴스 변수는 클래스 변수와 달리 모든 인스턴스가 공유하는 것이 아니라 각 개체가 보유한 데이터이다.
class FakeClass:
pass
fake_class1 = FakeClass()
fake_class2 = FakeClass()
fake_class1.fake_key = "Hi!"
fake_class2.fake_key = "Hello!"
print(fake_class1.fake_key,fake_class2.fake_key)
결과 :
Hi! Hello!
- 클래스에 선언된 인수와 별개로 인스턴스 변수 선언이 가능하다.
self의 활용 (인스턴스 변수 활용)
class Restaurant:
def __init__(self,food):
self.food=food
guest=Restaurant("beef")
print("food : ",guest.food)
- "food : beef"가 출력된다.
- 인스턴스를 생성할 때 food를 넣어줬기 때문에 각 인스턴스의 food에서 인자를 그대로 가지고 있다.
- self 자리에 인스턴스(객체) 이름을 넣어주면 해석하기 편하다.
class Restaurant:
intro ="May I help you?"
def __init__(self,name):
self.name=name
print("Excuse me {}".format(self.name))
def order(self):
print("I'm {}, {}".format(self.name,self.intro))
guest=Restaurant("minju")
guest.order()
결과 :
Excuse me minju
I'm minju, May I help you?
- 클래스 변수와 인스턴스 변수 모두 자유롭게 사용이 가능하다.
클래스 상속
#부모 클래스
class Restaurant:
def __init__(self):
self.name=input("name : ")
#자식 클래스
class Menu(Restaurant):
def __init__(self,food):
super().__init__()
self.food=food
def order(self):
print("{}'s food is {}".format(self.name,self.food))
guest=Menu("chicken")
guest.order()
결과 :
name : minju
minju's food is chicken
- 클래스 상속은 자식 클래스를 선언할 때 소괄호로 부모 클래스를 포함시킨다.
- 자식 클래스에서는 부모 클래스의 속성과 메서드는 기재하지 않아도 포함이 된다.
- super()는 부모 클래스라고 생각하면 쉽다.
class Country:
"""Super Class"""
name = '국가명'
population = '인구'
capital = '수도'
def show(self):
print('국가 클래스의 메소드입니다.')
class Korea(Country):
"""Sub Class"""
def __init__(self, name):
self.name = name
def show_name(self):
print('국가 이름은 : ', self.name)
a = Korea('대한민국')
a.show()
a.show_name()
print(a.name)
print(a.population)
print(a.capital)
결과 :
국가 클래스의 메소드입니다.
국가 이름은 : 대한민국
대한민국
인구
수도
'Data > Python' 카테고리의 다른 글
[스크래핑] Web scraping for news articles (2) (0) | 2022.03.28 |
---|---|
[스크래핑] Web scraping for news articles (1) (0) | 2022.03.28 |
[크롤링] 웹 크롤링 BeautifulSoup (2) (0) | 2022.03.25 |
[크롤링] 웹 크롤링 BeautifulSoup (1) (0) | 2022.03.25 |
[데이터 분석] Seaborn, 통계 자료 분석 (4) (0) | 2022.03.24 |