PYTHON

[빅데이터 분석] 2021.12.23 객체 지향 프로그래밍

죠으니 2021. 12. 23. 17:28

 

 

오늘은 오전에만 수업 하고 오후엔 자습을 했다.

이 분야를 공부해보니 관심도 많이 생기고 더 배우고 싶다는 생각도 많이 들었다.

고민이 생겨버렸네,,훔,,,내가 원하는 산업과 빅데이터를 접목시켜서 공부한걸 써먹을 수 있는 곳으로 가야지!

할수있다아ㅏㅏ

 

  <객체 지향 프로그래밍>

◇ 인스턴트 사용하기

기능을 묶은 하나의 단일 프로그램을 객체라는 코드에 넣어 다른 프로그래머가 재사용할 수 있게 해주는 기법

▶# SoccerPlayer 클래스 선언
class SoccerPlayer(object):     이 클래스에서 사용할 속성(변수)를 선언하는 함수
    def __init__(self, name, position, back_number): #__init__선수의 속성값을 구현해줌. self는 반드시 사용해야 됨
        self.name = name  
        self.position = position
        self.back_number = back_number
        
    # 선수의 등번호를 변경해서 출력하는 함수
    def change_back_number(self, new_number): #self는 형식적으로 넣어줌
        print("선수의 등번호를 변경한다: From %d to %d" % (self.back_number, new_number))
        self.back_number = new_number
    # %d은 정수형이 온다는 뜻
    
    # 클래스로 인스턴스를 생성했을 때, 그 인스턴스 자체를 print 함수로 화면에 출력하면 나오는 값(보통 인스턴스의 정보 표시)
    def __str__(self):
        return "Hello, My name is %s. I play in %s in center." % (self.name, self.position)

인스턴스 호출

   jinhyun = SoccerPlayer("Jinhyun", "MF", 10)

 

클래스를 사용하는 이유

다른 사람들이 결과를 사용할 때 이 데이터가 무엇을 위한 데이터인지 명확히 알 수 있다.

데이터

   names = ["Messi", "Ramos", "Ronaldo", "Park", "Buffon"]
   positions = ["MF", "DF", "CF", "WF", "GK"]
   numbers = [10, 4, 7, 13, 1]

 

 전체 SoccerPlayer 코드
class SoccerPlayer(object):
    def __init__(self, name, position, back_number):
        self.name = name
        self.position = position
        self.back_number = back_number
    def change_back_number(self, new_number):
        print("선수의 등 번호를 변경한다: From %d to %d" % (self.back_number, new_number))
        self.back_number = new_number
    def __str__(self):
        return "Hello, My name is %s. I play in %s in center." % (self.name, self.position)

 

클래스-인스턴스

player_objects= [SoccerPlayer(name, position, number) for name, position, number in zip(names, positions, numbers)]

for i in range(0, len(names)):
    print(player_objects[i])

Hello, My name is Messi. I play in MF in center.
Hello, My name is Ramos. I play in DF in center.
Hello, My name is Ronaldo. I play in CF in center.
Hello, My name is Park. I play in WF in center.
Hello, My name is Buffon. I play in GK in center.

◇ 상속

▶# 부모 클래스
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

# Person 클래스를 상속받는 Korean 클래스 -> 자식 클래스
class Korean(Person):
    pass  #pass는 아무런 기능이 없을때 형식적으로 넣어주는 것

# 인스턴스 생성
first_korean = Korean("Sungchul", 35)

print(first_korean.name)
print(first_korean.age)

Sungchul
35

▶ 부모 클래스
class Person(object):                       # 부모 클래스 Person 선언
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

    def about_me(self):                     # 메서드 선언
        print("저의 이름은", self.name, "이고요, 제 나이는", str(self.age), "살입니다.")

 

자식 클래스
class Employee(Person):                                             # 부모 클래스 Person으로부터 상속
    def __init__(self, name, age, gender, salary, hire_date):
        super().__init__(name, age, gender)     #super는 부모클래스의 어떤 것을 가져다 쓰겠다는 것                  # 부모 객체 사용
        self.salary = salary
        self.hire_date = hire_date                                  # 속성값 추가

    def do_work(self):                                              # 새로운 메서드 추가
        print("열심히 일을 한다.")

    def about_me(self):                                             # 부모 클래스 메서드 재정의(오버라이딩)
        super().about_me()      #부모 클래스 메서드 사용. 부모클래스에 있는 about_me를 쓴다는 것
        print("제 급여는", self.salary, "원이고, 제 입사일은", self.hire_date, "입니다.")
        

 

employee = Employee("Sungchul", 21, 'male', 1000, "2021-12-01" )

 

▶employee.about_me()

저의 이름은 Sungchul 이고요, 제 나이는 21 살입니다.
제 급여는 1000 원이고, 제 입사일은 2021-12-01 입니다.