Python - Class.

🛟 Dive.·2024년 3월 3일
0

Python

목록 보기
15/22

클래스.

  • 객체
  • 클래스
  • 생성자
  • 여러가지 메소드
  • 상속

주요 사항.

[핵심 키워드] : 객체, 객체 지향 프로그래밍 언어, 추상화 ,클래스, 인스턴스, 생성자, 메소드

[핵심 포인트] : 클래스와 객체에 대해 알아본다.

객체 지향 프로그래밍이란?

  • 객체를 우선으로 생각해서 프로그래밍하는 것.
  • 클래스 기반의 객체 지향 프로그램 언어는 클래스를 기반으로 객체 만들고, 그러한 객체를 우선으로 생각하여 프로그래밍 함.
  • 클래스(class) - 객체 지향의 가장 기본적 개념. 관련된 속성과 동작을 하나의 범주로 묶어 실세계의 사물을 흉내 냄.
  • 객체(object)

class의 구성.

  • class 구성 요소 - 사물의 속성은 변수로, 동작은 함수로 표현.

  • 멤버

    • 클래스 구성하는 변수와 함수.
  • 메소드.

    • 클래스에 소속된 함수.
  • 모델링.

    • 사물 분석하여 필요한 속성과 동작 추출.
  • 캡슐화.

    • 모델링 결과를 클래스로 포장.

객체.

  • 데이터.
    • 예시 - 딕셔너리로 객체 만들기.
students = [
    {"name" : "윤인성", "korean" : 87, "math" : 98, "english" : 88, 'science' : 95},
    {"name" : "윤인성", "korean" : 92, "math" : 98, "english" : 96, 'science' : 98},
    {"name" : "윤인성", "korean" : 76, "math" : 96, "english" : 94, 'science' : 90},
    {"name" : "윤인성", "korean" : 98, "math" : 92, "english" : 96, 'science' : 92},
    {"name" : "윤인성", "korean" : 95, "math" : 98, "english" : 98, 'science' : 98},
    {"name" : "윤인성", "korean" : 64, "math" : 88, "english" : 92, 'science' : 95}
]

print("이름", "총점", "평균", sep = "\t")

for student in students:
    score_sum = student["korean"] + student["math"] + \
        student["english"] + student["science"]
    score_average = score_sum / 4
    print(student["name"], score_sum, score_average, sep = "\t")

  • 객체
    • 여러 가지 속성 가질 수 있는 모든 대상.

    • 예시 - 객체를 만드는 함수.

      def create_student(name, korean, math, english, science):
          return {
              "name" : name,
              "korean" : korean,
              "math" : math,
              "english" : english,
              "science" : science
          }
      
          students = [
              create_student("윤인성", 87, 98, 88 ,95),
              create_student("연하진", 92, 98, 96, 98),
              create_student("구지연", 76, 96, 94, 90),
              create_student("나선주", 98, 92, 96, 92),
              create_student("윤아린", 95, 98, 98, 98),
              create_student("윤명월", 64, 88, 92, 92)
          ]
      
          print("이름", "총점", "평균", sep="\t")
          for student in students:
              score_sum = student["korean"] + student["math"] +\
                          student["english"] + student["science"]
              score_average = score_sum / 4
      
              # 출력합니다.
              print(student["name"], score_sum, score_average, sep = "\t")

클래스 선언.

  • 클래스(class)
    • 객체를 조금 더 효율적으로 생성하기 위해 만들어진 구문.

      class 클래스 이름:
      	클래스 내용
       인스턴스 이름(변수 이름) = 클래스 이름()
  • 인스턴스(instance)
    • 생성자 사용하여 이러한 클래스 기반으로 만들어진 객체.

      class student:
      	pass
      
      student = Student()
      
      student = [
      	Student(),
      	Student(),
      	Student(),
      	Student(),
      	Student(),
      	Student()
      }
  • 생성자.
    • 클래스 이름과 같은 함수.

    • 클래스 선언 형식.

      class 클래스 이름:
      	def __init__(self, 추가적인 매개변수):
      		pass
  • 클래스 내부의 함수는 첫 번째 매개변수로 반드시 self 입력해야 함.
    • self : ‘ 자기 자신’ 나타내는 딕셔너리.
    • self.<식별자> 형태로 접근.
  • 생성자 예제 1 - 객체 초기화.
    class Studnet:
    	def __init__(self, name, korean, math, english, science):
    		self.name = name
    		self.korean = korean
    		self.math = math
    		self.english = english
    		self.science = science
    
    students = [
    	Student("윤인성", 87, 98, 88, 95),
    	Student("연하진", 92, 98, 96, 98),
    	Student("구지연", 76, 96, 94, 90),
    	Student("나선주", 98, 92, 96, 92),
    	Student("윤아린", 95, 98, 98, 98),
    	Student("윤명월", 64, 88, 92, 92)
    ]
    
    student[0].name
    student[0].korean

생성자 예제 2 - 객체 초기화 예제.

class Human:
	def _init_(self, age, name):
		self.age = age
		self.name = name
	def intro(self):
		print(str(self.age) + "살" + self.name + "입니다.")

kim = Human(29, "김상형")
kim.intro()
lee = Human(45, "이승우")
lee.intro()

메소드.

  • 메소드
    • 클래스가 가지고 있는 함수.

      class 클래스 이름:
      	 def 메소드 이름(self, 추가적인 매개변수):
      			pass
      class Student:
          def __init__(self, name, korean, math, english, science):
              self.name = name
              self.korean = korean
              self.math = math
              self.english = english
              self.science = science
      
          def get_sum(self):
              return self.korean + self.math +\
                  self.english + self.science
      
          def get_average(self):
              return self.get_sum() / 4
          
          def to_string(self):
              return "{}\t{}\t{}".format(\
                  self.name,\
                  self.get_sum(),\
                  self.get_average())
      
      students = [
          Student("윤인성", 87, 98, 88 ,95),
          Student("연하진", 92, 98, 96, 98),
          Student("구지연", 76, 96, 94, 90),
          Student("나선주", 98, 92, 96, 92),
          Student("윤아린", 95, 98, 98, 98),
          Student("윤명월", 64, 88, 92, 92)
          ]
      
      print("이름", "총점", "평균", sep = "\t")
      for student in students:
          print(student.to_string())

# 키워드로 정리하는 핵심.

- 객체 : 속성을 가질 수 있는 모든 것 의미.
- 객체 지향 프로그래밍 언어 : 객체를 기반으로 프로그램 만드는 프로그래밍 언어.
- 추상화 : 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것.
- 클래스 : 객체를 쉽고 편리하게 생성하기 위해 만들어진 구문.
- 인스턴스 : 클래스를 기반으로 생성한 객체.
- 생성자 : 클래스 이름과 같은 인스턴스 생성할 때 만드는 함수.
- 메소드 : 클래스가 가진 함수

객체를 하나 선정해서 해당 속성 변수와 해당 메소드(함수- 기능, 동작)를 설계해 보세요.

  1. 전화기.
    1. 전화걸기.
    2. 메세지 보내기.
  2. 뮤직 폰.
    1. 전화기.
    2. 메세지 보내기.
    3. 음악틀기.
  3. 스마트폰.
    1. 전화기.
    2. 메세지 보내기.
    3. 음악틀기.
    4. 게임 다운받기.

2)번에서 설계된 클래스를 구현해 보세요.

class Phone:
    def __init__(self, call, message):
        self.call = call
        self.message = message

class musicPhone(Phone):
    def __init__(self, music):
        Phone.__init__(self)
        self.music = music

class smartPhone(musicPhone):
    def __init__(self, game):
        musicPhone.__init__(self)
        self.game = game

4) 터틀 그래픽에서 거북이는 객체이다. 2개의 거북이 객체를 생성해서(다른 shape 선택) 서로 다른 방향으로 움직이도만들어 보세요.

from turtle import *

class Turtle1:
    def __init__(self, x, y, shape, head):
        self.x = x
        self.y = y
        self.turtle = Turtle()
        self.turtle.goto(self.x, self.y)
        self.turtle.shape(shape)
        self.turtle.right(head)

    def move(self):
        for i in range(20):
            self.turtle.fd(10)

t1 = Turtle1(-100, 100, "turtle", 0)
t2 = Turtle1(0, 200, "circle", 180)

t1.move
t2.move
profile
Data Science. DevOps.

0개의 댓글