이 강의에서는 파이썬의 클래스, 생성자 및 상속에 대해 배웁니다.
이러한 개념은 다양한 유형을 정의해야 하는 대규모 프로그램에서 정말 중요합니다.
클래스
클래스는 프로그래밍에 필수적이며 파이썬에만 국한되지 않습니다. 다른 많은 프로그래밍 언어 클래스의 개념을 지원합니다. 우리는 클래스를 사용하여 새로운 데이터 유형을 정의합니다.
지금까지 우리는 숫자, 문자열, 불리언과 같은 파이썬의 기본 데이터 유형에 대해 배웠습니다. 이것들은 Python의 기본 또는 단순 데이터 유형입니다. 우리는 또한 목록 및 사전과 같은 몇 가지 복잡한 데이터 유형을 보았습니다.
이러한 유형은 매우 유용하지만 복잡한 개념을 모델링하는 데 항상 사용할 수는 없습니다. 예를 들어, 포인트나 장바구니에 대해 생각해 보십시오. 장바구니는 부울이나 목록이 아닙니다. 다른 종류의 데이터입니다. 따라서 클래스를 사용하여 실제 개념을 모델링하는 새 유형을 정의할 수 있습니다.
이제 point라는 새로운 데이터 유형을 정의해 보겠습니다. 이 새로운 유형은 이전에 확인했던 것과 같은 메소드를 가질 것입니다.
다음과 같이 하십시오.
"class" 키워드를 사용하여 클래스를 정의하는 것으로 시작하고 그 직후에 클래스 이름을 지정합니다.
class Point
이제 여기서 사용한 명명 규칙을 살펴보십시오. 저는 여기에서 첫 글자를 대문자로 표시했습니다. 이것은 우리가 파스칼 명명 규칙이라고 부르는 것입니다. 이 규칙은 항상 소문자를 사용하고 밑줄을 사용하여 여러 단어를 구분하는 변수 및 함수의 이름을 지정하는 데 사용하는 규칙과 다릅니다. 그러나 클래스 이름을 지정할 때 여러 단어를 구분하기 위해 밑줄을 사용하지 않고 모든 단어의 첫 글자를 대문자로 지정합니다.
클래스를 정의한 후 콜론이 사용되어 이제 블록이 정의됩니다.
class Point:
def move (self):
이 블록에서 우리는 포인트에 속하는 모든 기능이나 메소드를 정의할 수 있습니다. 예를 들어 점을 이동하기 위해 "이동"이라는 함수를 정의할 수 있습니다. 여는 괄호를 입력하자마자 PyCharm이 여기에 "self"를 자동으로 추가합니다. 이것은 특별한 키워드이며 곧 다시 설명하겠습니다. 터미널에 "이동"을 인쇄해 봅시다.
print("move")
"draw"와 같은 또 다른 방법을 정의하고 터미널에 인쇄해 보겠습니다.
def draw(self):
print("draw")
"point" 클래스의 정의가 끝났습니다. 이 새로운 유형으로 새로운 객체를 생성할 수 있습니다. 클래스는 단순히 해당 청사진을 기반으로 하는 실제 인스턴스인 객체를 생성하기 위한 청사진 또는 템플릿을 정의합니다. 객체를 생성하려면 클래스 이름을 입력한 다음 함수처럼 호출합니다. 이것은 새 객체를 생성한 다음 반환합니다. 그런 다음 해당 객체를 변수에 저장할 수 있습니다. 보여드리겠습니다:
여기서 우리는 1차원 점인 "pointXNUMX"을 정의했습니다. 터미널에서 개별 좌표를 인쇄할 수 있음을 알 수 있습니다.
이 지점에서 "그리기"와 "이동" 두 가지 방법을 사용할 수 있습니다.
요약하자면 클래스를 사용하여 새 유형을 정의하고 이러한 유형은 클래스 본문에서 정의하는 메서드를 가질 수 있습니다. 클래스는 프로그램의 어느 곳에서나 설정할 수 있는 속성을 가질 수 있습니다.
생성자
지금까지 클래스를 사용하여 새로운 유형을 생성하는 방법을 배웠습니다. 이제 이 구현에 작은 문제가 있습니다. 클래스를 사용하여 x 또는 y 좌표 없이 점 개체를 만들 수 있지만 이는 이상적이지 않습니다. 보여드리겠습니다.
x 좌표를 설정하기 전에 점을 만들고 인쇄해 보겠습니다. 프로그램을 실행하면 다음과 같은 속성 오류가 발생합니다.
점 개체에 x라는 속성이 없음을 의미합니다. 이제 문제는 x 또는 y 좌표가 없는 점 개체를 가질 수 있다는 것입니다. 이것은 우리가 한 점에 대해 이야기할 때마다 그 점이 어디에 있는지 알아야 하기 때문에 이치에 맞지 않습니다. 이 문제를 해결하기 위해 생성자를 사용합니다. 생성자는 객체를 생성할 때 호출되는 함수입니다.
다음은 생성자를 사용하는 방법입니다. 먼저 위의 프로그램에서 x, y 좌표 값을 전달해 보겠습니다.
point = Point(10, 20)
print(point.x)
이제 이 클래스에 생성자라는 특별한 메서드를 추가해야 합니다. 구문은 다음과 같습니다.
def __init__(self, x, y):
init
이것은 initialized의 약자로 새로운 포인트 객체가 생성될 때 호출되는 함수 또는 메소드입니다. x와 y는 바로 뒤에 추가됩니다. self
두 개의 추가 매개변수를 추가합니다.
그런 다음 x와 y를 전달된 값, 즉 10과 20에 매핑해야 합니다.
self.x = x
self.y = y
우리는을 사용하여 self
현재 객체를 참조하기 위해 x 속성을 함수 "x"에 전달된 x 인수로 설정합니다. 이런 식으로 사용 init
메서드를 사용하여 객체를 초기화할 수 있습니다. 이 방법을 생성자라고 합니다. 프로그램을 실행해 봅시다.
이제 나중에 x 및 y 좌표를 변경할 수 있습니다. x 좌표를 업데이트합시다.
point = Point(10, 20)
point.x = 11
print(point.x)
이제 x 좌표가 값 11로 업데이트됩니다.
운동
여기 당신을 위한 흥미로운 운동이 있습니다.
나는 당신이 사람이라는 새로운 유형을 정의하기를 바랍니다. 이러한 "사람" 개체에는 "name
" 속성 및 "talk()
”방법.
이것은 간단한 작업이며 몇 분 이상 걸리지 않아야 합니다.
해법
다음과 같이 "Person" 클래스를 정의하는 것으로 시작합니다.
class Person:
self.name = name
생성자는 나중에 정의하겠습니다. 이제 "Person" 개체를 만들 수 있습니다. 존이라고 부르자
john = Person("John Smith")
print(john.name)
john.talk()
이제 코드의 첫 번째 부분으로 이동하여 생성자를 만듭니다.
def __init__(self, name):
최종 코드는 다음과 같습니다.
형식이 지정된 문자열 및 기타 개념을 클래스 및 생성자와 함께 사용할 수도 있습니다.
계승
상속은 코드를 재사용할 수 있는 클래스와 관련된 또 다른 개념입니다.
이 코드를 고려하십시오.
class Dog:
def walk(self):
print("walk")
"walk" 메소드를 사용하여 "Dog" 클래스를 만들었습니다. 이 방법에서는 단순히 도보 메시지를 터미널에 인쇄합니다. 실제 프로그램에서 여기에 한 줄 대신 10줄의 코드가 있다고 가정해 보겠습니다. 앞으로 "walk" 메서드를 사용하기 위해 다른 클래스가 필요한 경우 해당 코드를 모두 반복해야 합니다. 이것은 이상적이지 않습니다.
프로그래밍에는 Don't repeat yourself의 줄임말인 DRY라는 원칙이 있습니다. 미래의 언젠가 우리가 "walk" 방법에 문제를 발견하고 다른 많은 곳에서 이 방법을 반복하거나 복제했다면 우리는 다시 돌아와 우리가 이것을 복제한 모든 단일 장소에서 그 문제를 수정해야 할 것이라고 가정해 봅시다. 암호. 그래서 프로그래밍에서 무언가를 두 번 정의해서는 안 됩니다.
이 문제를 해결하기 위한 다양한 접근 방식이 있지만 여기서는 초보자에게 더 쉽고 상속이라고 하는 방법을 배울 것입니다. 이 경우 다른 클래스 "mammal"을 만들고 해당 클래스에서 "walk" 속성을 정의합니다.
class Mammal:
def walk(self):
print("walk")
"Mammal" 클래스를 정의한 후 상속을 사용하여 다음과 같은 속성을 전달할 수 있습니다.
dog 및 cat 클래스는 모두 부모 클래스에 정의된 모든 클래스 메서드를 상속합니다. 이제 다음과 같이 개에 특정한 메서드를 추가할 수 있습니다.
class Dog:
def bark(self):
print("bark")
마무리!
이것은 클래스, 생성자 및 상속 개념이 있는 클래스의 코드 재사용에 관한 모든 것이었습니다. 이제 시리즈의 막바지에 다다랐습니다. 이 시점에서 Python에서 훌륭하고 읽기 쉽고 간결한 코드를 생성할 수 있어야 합니다.
다음 강의에서 모듈과 패키지의 개념을 살펴보겠습니다.
댓글을 남겨주세요.