객체 지향 프로그래밍(OOP : Object Oriented Programming)
기능을 묶은 하나의 단일 프로그램을 객체라는 코드에 넣어 다른 프로그래머가 재사용할 수 있게 하는 기법
1. 객체, 인스턴스, 클래스
- 객체(Object) : 실생활에 존재하는 물건 또는 개념
- 속성 : 객체가 가지고 있는 변수
- 행동 : 객체가 실제로 작동할 수 있는 함수, 메서드
- 클래스(Class) : 객체를 생성하는 설계도
- 인스턴스(Instance) : 여러 속성을 클래스에 담아 실제 생성되는 구체적인 객체
2. 클래스 구현하기
- 클래스 선언 : 클래스 예약어 클래스 이름 (상속받는 객체명) → class SoccerPlayer(object)
- 속성의 선언(속성) : __int__ ()함수 : 이 클래스에서 사용할 속성(변수)를 선언하는 함수
- 첫번째 매개변수는 반드시 self를 사용 : 클래스에서 생성된 인스턴스를 지칭 (값 자체는 받지 않음)
- self 뒤의 매개변수들은 실제로 클래스가 가진 속성
- 클래스 내 함수의 선언(행동) : 기존 함수선언과 동일하지만 self를 첫번째 매개변수에 반드시 넣어야함
- 인스턴스 호출 : 인스턴스이름=클래스이름(__init__()함수의 매개변수 인자들)
- 생성된 인스턴스와 클래스 내 sef는 같은 역할!!
3. 클래스를 사용하는 이유
- 클래스를 사용하면 동적으로 데이터를 변환하거나 데이터베이스에 저장하는 등의 다양한 역할 가능
- 다른 사람들이 결과를 사용할 때 이 데이터가 무엇을 위한 데이터인지 명확히 알 수 있다.
4. 객체 지향 프로그래밍의 특징
- 상속(Inheritance) : 부모 클래스에 정의된 속성과 메서드를 자식 클래스가 물려받아 사용하는 것
- super(). : 부모 클래스의 어떤 것을 그대로 가져다 쓰겠다는 의미
- 변수 추가 시 __init__() 함수 재정의 -> super().__init__(매개변수) 사용
# 전체 UnivStudent 클래스 선언
class UnivStudent(object):
# 이 클래스에서 사용할 속성(변수)를 선언하는 함수
def __init__(self,name,major,number): # 첫번쨰 매개변수는 반드시 self
self.name = name
self.major = major
self.number = number
# 선수의 등번호를 변경해서 출력하는 함수(정확히는 메소드)
def change_major(self,new_major):
print("학생의 전공을 변경한다: From %s to %s" % (self.major,new_major))
self.major = new_major
# 클래스로 인스턴스를 생성했을 때, 그 인스턴스 자체를 print 함수로 화면에 출력하는 나오는 값(보통 인스턴스의 정보 표시)
def __str__(self):
return "Hello. My name is %s. My student number is %d." % (self.name, self.number)
#인스턴스 호출 : 호출하는 순간에 self 자리에 jay가 들어간다.
jay = UnivStudent('jay','economics',2016314812)
print("현재 학생의 전공은:",jay.major)
현재 학생의 전공은: economics
# UnivStudent 클래스의 change_major 함수 호출
jay.change_major("Statistics")
학생의 전공을 변경한다: From economics to Statistics
print("현재 학생의 전공은",jay.major)
현재 학생의 전공은 Statistics
print(jay)
Hello. My name is jay. My student number is 2016314812.
#상속
#부모 클래스
class Person(object): # 부모 클래스 Person 선언
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def about_me(self): # 메서드 선언 -> __str__(self)와 동일
print("저의 이름은",self.name,"이고요, 제 나이는",str(self.age),"살 입니다.")
jay = Person('jay',30, '남자') #인스턴스 선언
jay.about_me()
저의 이름은 jay 이고요, 제 나이는 30 살 입니다.
# 자식 클래스
class Greeting(Person): # 부모 클래스 Person으로부터 상속
def __init__(self,name,age,gender,hobby,marriage): # 새로운 내용 추가
super().__init__(name,age,gender) # 부모 객체 사용
self.hobby = hobby
self.marriage = marriage # 속성값 추가
def positive(self): #새로운 메서드 추가
print(self.name,"는 긍정적인 사람입니다.")
def about_me(self): # 부모 클래스 함수 재정의
super().about_me() # 부모 클래스 함수 사용
print("제 취미는", self.hobby, "이고", self.marriage, "입니다
introduce = Greeting('jay',30,'남자','당구','미혼')
introduce.positive()
jay 는 긍정적인 사람입니다.
introduce.about_me()
저의 이름은 jay 이고요, 제 나이는 30 살 입니다. 제 취미는 당구 이고 미혼 입니다.
'Data Science > python' 카테고리의 다른 글
예외 처리 구문 : try-except 구문 (0) | 2021.12.24 |
---|---|
파이썬 스타일 코드 2 (0) | 2021.12.23 |
pandas 데이터프레임에 컬럼 추가/제거 df['column'] ="Value" df.drop('column', axis=1, inplace=) (0) | 2021.12.22 |
파이썬 스타일 코드 (0) | 2021.12.22 |
자료구조 정리 (0) | 2021.12.22 |