파이썬의 클래스에 대해 공부한 내용을 작성해보려 한다.
비슷한 객체를 하나하나 만드는 것은 매우 비효율적이다.
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)