Python_TIL_09

Hanbin Lee·2021년 11월 19일
0

Python_TIL

목록 보기
9/10
post-thumbnail

파이썬의 클래스에 대해 공부한 내용을 작성해보려 한다.

클래스

비슷한 객체를 하나하나 만드는 것은 매우 비효율적이다.
class 키워드를 사용하여 클래스를 만들고 인자로 이름과 같은 속성 값만 넣어서 새로운 객체를 생성 할 수 있다.
클래스 네이밍은 첫 글자를 대문자로 지정한다.

기본 형태

class 클래스명:
  def __init__(self, 속성):
    self.속성 = 속성
  def 메서드명():
    메서드 내용

__init__

Javascript에서 constructor 메서드와 같은 맥락이다.
클래스 생성시 가장 먼저 실행되는 메서드로, 인자로 들어온 속성을 정리한다.

class Student:
  def __init__(self, name, grade, gender):
    self.name = name
    self.grade = grade
    self.gender = gender

student1 = Student("유재석", 1, "남자")
student2 = Student("박명수", 2, "남자")

print(student1.name, student1.grade, student1.gender)
print(student2.name, student2.grade, student2.gender)

메서드

클래스 내부에 함수 형식으로 메서드를 작성 할 수 있다.

class Student:
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def to_study(self, time):
    print("공부 중 입니다.")
    print("{}시간 뒤까지 할 예정입니다.".format(time))

student1 = Student("유재석", "남자")

student1.to_sleep(6)
# "공부 중 입니다."
# "6시간 뒤까지 할 예정입니다."

상속

다른 클래스의 속성 및 메서드를 상속 받을 수 있다.

class Student:
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def to_study(self, time):
    print("공부 중 입니다.")
    print("{}시간 뒤까지 할 예정입니다.".format(time))

class High_student(Student):
  def __init__(self, name, gender, grade):
    Student.__init__(self, name, gender)
    self.grade = grade

  def to_play(self):
    print("친구들과 놀고 있습니다.")

student = High_student("박명수", "남자", 2)

student.to_study(6)
# "공부 중 입니다."
# "6시간 뒤까지 할 예정입니다."
student.to_play() # "친구들과 놀고 있습니다."

다중상속

클래스 상속은 여러 클래스를 상속 받을 수 있다.

class Student:
  def __init__(self, name, gender):
    self.name = name
    self.gender = gender

  def to_study(self, time):
    print("공부 중 입니다.")
    print("{}시간 뒤까지 할 예정입니다.".format(time))

class Footballer:
  def __init__(self, position, number):
    self.position = position
    self.number = number

  def to_training(self, time):
    print("훈련 중 입니다.")
    print("{}시간 뒤까지 할 예정입니다.".format(time))

class High_student(Student):
  def __init__(self, name, gender, grade):
    Student.__init__(self, name, gender)
    self.grade = grade

  def to_play(self):
    print("친구들과 놀고 있습니다.")

class High_student_footballer(High_student, Footballer):
  def __init__(self, name, gender, grade, position, number):
    High_student.__init__(name, gender, grade)
    Footballer.__init__(position, number)

student = High_student_footballer("양세형", "남자", 3, "FW", 11)

student.to_play() # "친구들과 놀고 있습니다."
student.to_training(6)
# "훈련 중 입니다."
# "6시간 뒤까지 할 예정입니다."

메서드 오버라이팅

위 예제에서 High_student_footballer는 훈련이 곧 공부이기 때문에 to_training 메서드를 to_study 으로 지정해도 무방하다.

class High_student_footballer(High_student, Footballer):
  def __init__(self, name, gender, grade, position, number):
    High_student.__init__(self, name, gender, grade)
    Footballer.__init__(self, position, number)

  def to_study(self, time):
    self.to_training(time)

이렇게 self를 사용하여 메서드 오버라이팅을 진행 할 수 있다.

pass

이름 그대로 넘어간다는 뜻이다. 함수의 실행을 그냥 넘어간다.

class Middle_student(Student):
  def __init__(self, name, gender):
    pass

student = Middle_student("정준하", "남자") # 에러 없이 실행이 종료되었다.

super

클래스가 다른 클래스를 상속받을 때, 속성 값을 연결 시켜주어야 하는데 super 키워드를 사용해서 연결 시켜줄 수 있다.
super 키워드를 사용하여 연결 시켜줄 때는 self는 생략한다.

class Schoolchild(Student):
  def __init__(self, name, gender):
    # Student.__init__(self, name, gender)
    super().__init__(name, gender)

REFERENCE

나도코딩 유튜브
Python - 공식문서
점프투파이썬 - WikiDocs

profile
안녕하세요 백엔드 개발자 이한빈 입니다 :)

0개의 댓글