워드 프레스

Python 객체 지향 프로그래밍(OOP) 초보자 가이드

프로그래밍은 예술입니다. 그리고 예술에서와 마찬가지로 적절한 붓과 물감을 선택하는 것은 최고의 작품을 만드는 데 필수적입니다. Python 객체 지향 프로그래밍이 그러한 기술 중 하나입니다.

올바른 프로그래밍 언어를 선택하는 것은 모든 프로젝트의 중요한 부분이며 유동적이고 즐거운 개발 또는 완전한 악몽으로 이어질 수 있습니다. 따라서 사용 사례에 가장 적합한 언어를 사용하는 것이 가장 좋습니다.

이것이 가장 인기 있는 프로그래밍 언어 중 하나인 Python에서 객체 지향 프로그래밍을 배우는 주된 이유입니다.

배우자!

예제 파이썬 프로그램

문제를 파헤치기 전에 질문을 합시다. 아래와 같은 Python 프로그램을 작성한 적이 있습니까?

secret_number = 20
 
while True:
   number = input('Guess the number: ')
 
   try:
       number = int(number)
   except:
       print('Sorry that is not a number')
       continue
 
   if number != secret_number:
       if number > secret_number:
           print(number, 'is greater than the secret number')
 
       elif number < secret_number:
           print(number, 'is less than the secret number')
   else:
       print('You guessed the number:', secret_number)
       break

이 코드는 단순한 숫자 추측기입니다. Python 파일에 복사하여 시스템에서 실행해 보십시오. 그것은 그 목적을 완벽하게 달성합니다.

그러나 여기에 큰 문제가 있습니다. 새로운 기능을 구현하도록 요청하면 어떻게 될까요? 간단한 것일 수 있습니다. 예를 들면 다음과 같습니다.

"입력이 비밀 번호의 배수이면 사용자에게 힌트를 주십시오."

기능의 수와 중첩된 조건의 총 수를 늘리면 프로그램이 빠르게 복잡해지고 무거워집니다.

이것이 바로 객체 지향 프로그래밍이 해결하려고 하는 문제입니다.

프로그래밍은 아름다운 것을 만들기 위해 적절한 도구가 필요한 예술입니다 🎨 여기에서 Python 객체 지향 프로그래밍에 대해 자세히 알아보세요 👇이야기하려면 클릭

Python OOP를 배우기 위한 요구 사항

객체 지향 프로그래밍을 시작하기 전에 Python 기본 사항을 확실히 이해하는 것이 좋습니다.

"기본"으로 간주되는 주제를 분류하는 것은 어려울 수 있습니다. 이 때문에 우리는 Python에서 객체 지향 프로그래밍을 배우는 데 필요한 모든 주요 개념이 포함된 치트 시트를 설계했습니다.

  • 변하기 쉬운: 특정 객체를 가리키는 상징적 이름(무엇을 사물 기사를 통해 의미).
  • 산술 연산자: 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 정수 나누기(//), 모듈로(%).
  • 내장 데이터 유형: 숫자(정수, 부동 소수점, 복소수), 시퀀스(문자열, 목록, 튜플), 부울(True, False), 사전 및 집합.
  • 부울 표현식: 결과가 있는 표현식 참된 or 그릇된.
  • 가정 어구: 부울 표현식을 평가하고 결과에 따라 일부 프로세스를 수행합니다. 취급 다른 경우라면 진술.
  • Loop : 코드 블록의 반복 실행. 그것은 될 수 있습니다 ...에 대한 or 동안 루프.
  • 기능 : 조직화되고 재사용 가능한 코드 블록. 키워드로 생성합니다. 데프.
  • 인수 : 함수에 전달된 개체입니다. 예를 들어: sum([1, 2, 4])
  • Python 스크립트 실행: 터미널 또는 명령줄을 열고 "python . "
  • Python 셸 열기: 터미널을 열고 입력 python or python3 시스템에 따라 다릅니다.

이제 이러한 개념이 명확해졌으므로 객체 지향 프로그래밍을 이해하는 방향으로 나아갈 수 있습니다.

파이썬에서 객체 지향 프로그래밍이란 무엇입니까?

객체 지향 프로그래밍(OOP)은 복잡한 문제를 객체로 생각할 수 있는 프로그래밍 패러다임입니다.

패러다임은 문제 해결의 기반을 제공하는 이론입니다.

따라서 OOP에 대해 이야기할 때 객체 문제를 해결하는 데 사용하는 개념 및 패턴 집합을 참조합니다.

파이썬에서 객체는 데이터(속성)와 동작(메소드)의 단일 모음입니다. 사물을 주변의 실제 사물로 생각할 수 있습니다. 예를 들어 계산기를 고려하십시오.

계산기는 객체가 될 수 있습니다.
계산기는 객체가 될 수 있습니다.

아시다시피 데이터(속성)는 항상 명사이고 행동(메소드)은 항상 동사입니다.

이 구획화는 객체 지향 프로그래밍의 중심 개념입니다. 데이터를 저장하고 특정 종류의 기능을 포함하는 개체를 빌드합니다.

Python에서 객체 지향 프로그래밍을 사용하는 이유는 무엇입니까?

OOP를 사용하면 안전하고 신뢰할 수 있는 소프트웨어를 만들 수 있습니다. 많은 Python 프레임워크와 라이브러리는 이 패러다임을 사용하여 코드베이스를 구축합니다. 몇 가지 예는 Django, Kivy, pandas, NumPy 및 TensorFlow입니다.

Python에서 OOP를 사용할 때의 주요 이점을 살펴보겠습니다.

파이썬 OOP의 장점

다음 이유 때문에 Python에서 객체 지향 프로그래밍을 사용하도록 선택할 수 있습니다.

모든 최신 프로그래밍 언어는 OOP를 사용합니다.

이 패러다임은 언어 독립적입니다. Python에서 OOP를 배운다면 다음에서 사용할 수 있습니다.

  • 자바
  • PHP (PHP와 Python의 비교를 읽으십시오)
  • 루비
  • 자바 스크립트
  • C#
  • 코 틀린

이러한 모든 언어는 기본적으로 객체 지향이거나 객체 지향 기능에 대한 옵션을 포함합니다. Python 이후에 배우고 싶다면 더 쉬울 것입니다. 객체로 작업하는 언어 간에 많은 유사점을 찾을 수 있습니다.

OOP를 사용하면 더 빠르게 코딩할 수 있습니다.

더 빠르게 코딩한다고 해서 더 적은 줄의 코드를 작성하는 것은 아닙니다. 이는 프로젝트의 안정성을 손상시키지 않으면서 더 짧은 시간에 더 많은 기능을 구현할 수 있음을 의미합니다.

객체 지향 프로그래밍을 사용하면 추상화를 구현하여 코드를 재사용할 수 있습니다. 이 원칙은 코드를 더 간결하고 읽기 쉽게 만듭니다.

아시다시피 프로그래머는 코드를 작성하는 것보다 읽는 데 훨씬 더 많은 시간을 보냅니다. 가능한 한 빨리 기능을 제공하는 것보다 가독성이 항상 더 중요한 이유입니다.

읽을 수 없는 코드로 인해 생산성이 저하됨
읽을 수 없는 코드로 인해 생산성이 저하됨

추상화 원칙에 대한 자세한 내용은 나중에 보게 될 것입니다.

OOP는 스파게티 코드를 피하는 데 도움이 됩니다.

이 기사의 시작 부분에 있는 숫자 추측 프로그램을 기억하십니까?

기능을 계속 추가하면 많은 중첩이 생깁니다. if 앞으로의 발언. 이렇게 끝없이 얽힌 코드를 스파게티 코드라고 하며 최대한 피해야 합니다.

OOP는 객체의 모든 논리를 압축할 수 있는 가능성을 제공하므로 중첩된 긴 조각을 피할 수 있습니다. 만약에.

OOP는 모든 상황에 대한 분석을 향상시킵니다.

OOP에 대한 약간의 경험을 얻으면 문제를 작고 특정한 대상으로 생각할 수 있습니다.

이러한 이해는 신속한 프로젝트 초기화로 이어집니다.

구조적 프로그래밍 대 객체 지향 프로그래밍

구조적 프로그래밍은 작은 프로그램을 만드는 가장 간단한 방법이기 때문에 초보자가 가장 많이 사용하는 패러다임입니다.

Python 프로그램을 순차적으로 실행하는 작업이 포함됩니다. 이는 컴퓨터에 작업 목록을 제공한 다음 위에서 아래로 실행한다는 것을 의미합니다.

커피숍 프로그램을 사용하여 구조화된 프로그래밍의 예를 살펴보겠습니다.

small = 2
regular = 5
big = 6
 
user_budget = input('What is your budget? ')
 
try:
   user_budget = int(user_budget)
except:
   print('Please enter a number')
   exit()
 
if user_budget > 0:
   if user_budget >= big:
       print('You can afford the big coffee')
       if user_budget == big:
           print('It's complete')
       else:
           print('Your change is', user_budget - big)
   elif user_budget == regular:
       print('You can afford the regular coffee')
       print('It's complete')
   elif user_budget >= small:
       print('You can buy the small coffee')
       if user_budget == small:
           print('It's complete')
       else:
           print('Your change is', user_budget - small)

위의 코드는 커피숍 공급업체 역할을 합니다. 그것은 당신에게 예산을 요구할 것이고, 당신이 살 수 있는 가장 큰 커피를 당신에게 "판매"할 것입니다.

터미널에서 실행해 보세요. 입력에 따라 단계별로 실행됩니다.

이 코드는 완벽하게 작동하지만 세 가지 문제가 있습니다.

  1. 반복되는 논리가 많습니다.
  2. 그것은 많은 중첩을 사용합니다 if 조건문.
  3. 읽고 수정하기 어려울 것입니다.

OOP는 이러한 모든 문제에 대한 솔루션으로 개발되었습니다.

위의 프로그램을 OOP로 구현한 것을 보자. 아직 이해하지 못하더라도 걱정하지 마십시오. 구조화 프로그래밍과 객체 지향 프로그래밍을 비교하기 위한 것입니다.

class Coffee:
        # Constructor
        def __init__(self, name, price):
                self.name = name
                self.price = float(price)
        def check_budget(self, budget):
                # Check if the budget is valid
                if not isinstance(budget, (int, float)):
                        print('Enter float or int')
                        exit()
                if budget < 0: 
                    print('Sorry you don't have money') 
                    exit() 
        def get_change(self, budget):
                return budget - self.price
        
        def sell(self, budget):
                self.check_budget(budget)
                if budget >= self.price:
                        print(f'You can buy the {self.name} coffee')
                        if budget == self.price:
                                print('It's complete')
                        else:
                                print(f'Here is your change {self.get_change(budget)}$')

                        exit('Thanks for your transaction')

참고 : 다음 모든 개념은 이 기사를 통해 더 자세히 설명됩니다.

위의 코드는 수업 '커피'라는 이름으로 "name"과 "price"라는 두 가지 속성이 있으며 둘 다 메서드에서 사용됩니다. 기본 방법은 판매 프로세스를 완료하는 데 필요한 모든 논리를 처리하는 "판매"입니다.

해당 클래스를 실행하려고 하면 출력이 표시되지 않습니다. 이것은 주로 우리가 커피 자체가 아니라 커피에 대한 "템플릿"을 선언하기 때문에 발생합니다.

다음 코드를 사용하여 해당 클래스를 구현해 보겠습니다.

small = Coffee('Small', 2)
regular = Coffee('Regular', 5)
big = Coffee('Big', 6)
 
try:
   user_budget = float(input('What is your budget? '))
except ValueError:
   exit('Please enter a number')
  
for coffee in [big, regular, small]:
   coffee.sell(user_budget)

여기서 우리는 만들고 있습니다 인스턴스, 또는 "Coffee" 클래스의 커피 개체를 선택한 다음 사용자가 옵션을 제공할 수 있을 때까지 각 커피의 "sell" 메서드를 호출합니다.

두 가지 접근 방식 모두 동일한 결과를 얻을 수 있지만 OOP를 사용하면 프로그램 기능을 훨씬 더 잘 확장할 수 있습니다.

다음은 객체 지향 프로그래밍과 구조적 프로그래밍을 비교한 표입니다.

OOP 구조적 프로그래밍
손쉬운 유지 유지하기 어렵다
Don't Repeat Yourself(DRY) 접근 방식 여러 곳에서 반복되는 코드
여러 곳에서 재사용되는 작은 코드 조각 소수의 장소에 많은 양의 코드
객체 접근 블록 코드 접근
디버그가 더 쉬움 디버그하기가 더 어렵습니다.
큰 학습 곡선 더 간단한 학습 곡선
대규모 프로젝트에서 사용 간단한 프로그램에 최적화

패러다임 비교를 마치려면:

  • 어느 패러다임도 완벽하지 않습니다(OOP는 단순한 프로젝트에서 사용하기에는 압도적일 수 있습니다).
  • 이것은 문제를 해결하는 두 가지 방법일 뿐입니다. 거기에 다른 사람들이 있습니다.
  • OOP는 대규모 코드베이스에 사용되는 반면 구조화 프로그래밍은 주로 간단한 프로젝트에 사용됩니다.

Python의 내장 객체로 넘어갑시다.

파이썬에서 모든 것은 객체다

우리는 당신에게 비밀을 말할 것입니다 : 당신은 그것을 눈치 채지 않고 항상 OOP를 사용해 왔습니다.

Python에서 다른 패러다임을 사용하는 경우에도 여전히 객체를 사용하여 거의 모든 작업을 수행합니다.

왜냐하면 파이썬에서는 모두 객체입니다.

객체의 정의를 기억하십시오. Python에서 객체는 데이터(속성)와 동작(메서드)의 단일 모음입니다.

이는 Python의 모든 데이터 유형과 일치합니다.

문자열은 데이터(문자)와 동작(높은(), 보다 낮은(), 등..). 에도 동일하게 적용 정수, 수레, 부울, 기울기, 및 사전.

계속하기 전에 속성과 메서드의 의미를 검토해 보겠습니다.

속성 및 메서드

속성은 내부 변수 메소드는 객체 내부에서 기능 어떤 행동을 유발합니다.

Python 셸에서 간단한 연습을 해보자. 입력하여 열 수 있습니다. python or python3 터미널에서.

Linux OS에서 실행되는 Python 3.9 셸
파이썬 쉘

이제 Python 셸을 사용하여 메서드와 유형을 검색해 보겠습니다.

>>> behmaster = 'Behmaster, Premium WordPress hosting'
>>> behmaster.upper()
'BEHMASTER, PREMIUM WORDPRESS HOSTING'

두 번째 줄에서는 문자열 메서드를 호출하고 있습니다. 높은(). 문자열의 내용을 모두 대문자로 반환합니다. 그러나 원래 변수는 변경되지 않습니다.

>>> behmaster
'Behmaster, Premium WordPress hosting'

객체로 작업할 때 유용한 기능에 대해 알아보겠습니다.

또한 유형() 함수를 사용하면 객체의 유형을 가져올 수 있습니다. "유형"은 개체가 속한 클래스입니다.

>>> type(behmaster)
# class 'str'

또한 dir () 함수는 객체의 모든 속성과 메서드를 반환합니다. 로 테스트해보자 behmaster 변하기 쉬운.

>>> dir(kinsta)
['__add__', '__class__',  ........... 'upper', 'zfill']

이제 이 개체의 숨겨진 속성 중 일부를 인쇄해 보십시오.

 >>> behmaster.__class__ # class ‘str’ e>

이것은 클래스 객체를 출력합니다 behmaster 에 속합니다. 그래서 우리는 유일한 것을 말할 수 있습니다 유형 함수 반환은 __수업__ 객체의 속성.

모든 데이터 유형을 실험하고 터미널에서 직접 모든 속성과 메소드를 발견할 수 있습니다. 공식 문서에서 내장 데이터 유형에 대해 자세히 알아볼 수 있습니다.

파이썬의 첫 번째 객체

A 수업 템플릿과 같습니다. 정의한 속성과 메서드를 기반으로 사용자 지정 개체를 만들 수 있습니다.

라고 생각하시면 됩니다 쿠키 커터 모양, 크기 등 정의된 특성으로 완벽한 쿠키(개체, 추적 쿠키가 아님)를 굽기 위해 수정합니다.

반면에, 우리는 인스턴스. 인스턴스는 고유한 메모리 주소를 가진 클래스의 개별 개체입니다.

여러 인스턴스, cookie1, cookie2 및 cookie3가 있는 클래스 쿠키
Python의 인스턴스

클래스와 인스턴스가 무엇인지 알았으니 이제 몇 가지를 정의해 보겠습니다!

Python에서 클래스를 정의하려면 다음을 사용합니다. 수업 키워드 다음에 해당 이름이 옵니다. 이 경우 다음과 같은 클래스를 생성합니다. 쿠키.

참고 : 파이썬에서 우리는 낙타 대소문자 이름 규칙을 사용하여 클래스 이름을 지정합니다.

class Cookie:
	pass

Python 셸을 열고 위의 코드를 입력합니다. 클래스의 인스턴스를 생성하려면 클래스 이름과 그 뒤에 괄호를 입력하기만 하면 됩니다. 함수를 호출하는 것과 같은 과정입니다.

cookie1 = Cookie()

축하합니다 — 방금 Python에서 첫 번째 객체를 만들었습니다! 다음 코드로 해당 ID와 유형을 확인할 수 있습니다.

id(cookie1)
140130610977040 # Unique identifier of the object

type(cookie1)

보시다시피 이 쿠키는 메모리에 고유한 식별자를 가지고 있으며 그 유형은 다음과 같습니다. 쿠키.

객체가 다음을 사용하여 클래스의 인스턴스인지 확인할 수도 있습니다. 인스턴스() 기능.

isinstance(cookie1, Cookie)
# True
isinstance(cookie1, int)
# False
isinstance('a string', Cookie)
# False

생성자 메서드

또한 __초기화__() 메서드는 "생성자"라고도 합니다. 객체를 인스턴스화할 때마다 Python이라고 합니다.

생성자는 존재하는 데 필요한 최소한의 매개변수 세트로 객체의 초기 상태를 생성합니다. 수정하자 쿠키 클래스이므로 생성자에서 매개변수를 허용합니다.

class Cookie:
	# Constructor
	def __init__(self, name, shape, chips='Chocolate'):
		# Instance attributes
		self.name = name
		self.shape = shape
		self.chips = chips

. 쿠키 클래스에서 모든 쿠키에는 이름, 모양 및 칩이 있어야 합니다. 우리는 마지막 것을 "초콜릿"으로 정의했습니다.

반면에, 미국에서 체류를 연장하고자 이전의 승인을 갱신하려던 자기 클래스의 인스턴스(객체 자체)를 나타냅니다.

셸에 클래스를 붙여넣고 평소와 같이 쿠키의 인스턴스를 만듭니다.

cookie2 = Cookie()
# TypeError

오류가 발생합니다. 개체가 유지되는 데 필요한 최소한의 데이터 집합을 제공해야 하기 때문입니다. 이 경우, name형성 우리는 이미 설정했기 때문에 "초콜릿"으로.

cookie2 = Cookie('Awesome cookie', 'Star')

인스턴스의 속성에 액세스하려면 점 표기법을 사용해야 합니다.

cookie2.name
# 'Awesome cookie'
cookie2.shape
# 'Star'
cookie2.chips
# 'Chocolate'

지금은 쿠키 수업은 너무 맛있는 것이 없습니다. 샘플 메서드를 추가해 보겠습니다. 빵 굽기() 일을 더 흥미롭게 만들기 위해.

class Cookie:
	# Constructor
	def __init__(self, name, shape, chips='Chocolate'):
		# Instance attributes
		self.name = name
		self.shape = shape
		self.chips = chips

	# The object is passing itself as a parameter
	def bake(self):
		print(f'This {self.name}, is being baked with the shape {self.shape} and chips of {self.chips}')
		print('Enjoy your cookie!')

메서드를 호출하려면 점 표기법을 사용하고 이를 함수로 호출합니다.

cookie3 = Cookie('Baked cookie', 'Tree')
cookie3.bake()
# This Baked cookie, is being baked with the shape Tree and chips of Chocolate
Enjoy your cookie!

파이썬에서 OOP의 4가지 기둥

객체 지향 프로그래밍에는 네 가지 주요 기둥이 포함됩니다.

1. 추상화

추상화는 응용 프로그램의 내부 기능을 사용자에게 숨깁니다. 사용자는 최종 클라이언트이거나 다른 개발자일 수 있습니다.

우리는 찾을 수있다. 추출 우리의 일상 생활에서. 예를 들어 휴대전화 사용법은 알고 있지만 앱을 열 때마다 휴대전화 안에서 무슨 일이 일어나고 있는지 정확히 모를 수 있습니다.

경쟁 우위를 제공하는 호스팅 솔루션이 필요하십니까? Behmaster의 놀라운 속도, 최첨단 보안 및 자동 크기 조정 기능을 제공합니다. 우리의 계획을 확인하십시오

또 다른 예는 Python 자체입니다. 이를 사용하여 기능적 소프트웨어를 구축하는 방법을 알고 있으며 Python의 내부 작동을 이해하지 못하더라도 할 수 있습니다.

코드에 동일하게 적용하면 문제의 모든 개체를 수집하고 추상 표준 기능을 클래스로.

2. 상속

상속을 통해 여러 하위 클래스 이미 정의된 클래스에서

그것의 주요 목적은 DRY 원칙을 따르는 것입니다. 모든 공유 구성 요소를 구현하여 많은 코드를 재사용할 수 있습니다. 슈퍼클래스.

의 실생활 개념으로 생각할 수 있습니다. 유전적 유전. 자식(하위 클래스)은 두 부모(수퍼 클래스) 간의 상속 결과입니다. 그들은 모든 물리적 특성(속성)과 몇 가지 일반적인 행동(메소드)을 상속합니다.

3. 다형성

다형성을 사용하면 메서드와 속성을 약간 수정할 수 있습니다. 하위 클래스 이전에 정의된 슈퍼클래스.

문자적 의미는 "많은 형태들.” 이름은 같지만 기능이 다른 메서드를 빌드하기 때문입니다.

이전 아이디어로 돌아가서 어린이도 다형성의 완벽한 예입니다. 정의된 동작을 상속할 수 있습니다. 배고파지다() 그러나 약간 다른 방식으로, 예를 들어 매 4시간이 아니라 매 6시간마다 배고프다.

4. 캡슐화

캡슐화는 클래스에서 데이터의 내부 무결성을 보호하는 프로세스입니다.

비록 없지만 사설 Python에서 문을 사용하면 Python에서 맹글링을 사용하여 캡슐화를 적용할 수 있습니다. 라는 특별한 방법이 있습니다. 게터세터 고유한 속성과 메서드에 액세스할 수 있습니다.

상상해보자 휴먼 이름이 고유한 속성이 있는 클래스 _신장. 이 속성은 특정 제약 조건 내에서만 수정할 수 있습니다(3미터보다 높으면 거의 불가능).

Area Shape Resolver 계산기 만들기

Python의 가장 좋은 점 중 하나는 CLI(명령줄 인터페이스) 프로그램에서 복잡한 웹 앱에 이르기까지 다양한 소프트웨어를 만들 수 있다는 것입니다.

OOP의 기둥 개념을 배웠으니 이제 실제 프로젝트에 적용할 차례입니다.

참고 : 다음 코드는 모두 이 GitHub 리포지토리 내에서 사용할 수 있습니다. Git으로 코드 버전을 관리하는 데 도움이 되는 코드 수정 도구입니다.

당신의 임무는 다음 모양의 면적 계산기를 만드는 것입니다.

  • 사각형.
  • 구형
  • 삼각형
  • 육각형

모양 기본 클래스

먼저 파일을 생성합니다. 계산기.py 그리고 그것을 엽니다. 작업할 개체가 이미 있으므로 쉽게 추상 수업에서 그들을.

공통 특성을 분석하고 이러한 모든 특성이 2D 모양. 따라서 가장 좋은 방법은 클래스를 만드는 것입니다. 셰이프 방법으로 get_area() 각 모양이 상속됩니다.

참고 : 모든 메소드는 동사여야 합니다. 이 메서드의 이름이 get_area() 하지 지역().

class Shape:
	def __init__(self):
		pass

	def get_area(self):
		pass

위의 코드는 클래스를 정의합니다. 그러나 아직 흥미로운 것은 없습니다.

이러한 모양 대부분의 표준 기능을 구현해 보겠습니다.

class Shape:
	def __init__(self, side1, side2):
		self.side1 = side1
		self.side2 = side2

	def get_area(self):
		return self.side1 * self.side2

	def __str__(self):
		return f'The area of this {self.__class__.__name__} is: {self.get_area()}'

이 코드로 무엇을 하는지 분석해 보겠습니다.

  • . __init__ 메소드, 두 개의 매개변수를 요청하고 있습니다. side1side2. 이들은 다음과 같이 남을 것입니다 인스턴스 속성.
  • 또한 get_area() 함수는 모양의 면적을 반환합니다. 이 경우 다른 모양으로 구현하는 것이 더 쉽기 때문에 직사각형의 넓이 공식을 사용합니다.
  • 또한 __str__() 방법은 "마법의 방법"입니다. __초기화__(). 인스턴스가 인쇄되는 방식을 수정할 수 있습니다.
  • 또한 self.__class__.__name__ 숨겨진 속성은 클래스의 이름을 나타냅니다. 당신이 함께 일하고 있었다면 삼각형 클래스에서 해당 속성은 "Triangle"이 됩니다.

직사각형 클래스

Rectangle의 면적 공식을 구현했기 때문에 간단한 구형 상속만 하는 클래스 셰이프 클래스입니다.

신청하려면 계승 Python에서는 평소와 같이 클래스를 만들고 슈퍼클래스 괄호로 상속받고자 합니다.

# Folded base class
class Shape: ...
 
class Rectangle(Shape): # Superclass in Parenthesis
	pass

스퀘어 클래스

우리는 훌륭한 접근 방식을 취할 수 있습니다 다형성 와 더불어 사각형. 클래스입니다.

정사각형은 네 변이 모두 같은 직사각형이라는 것을 기억하십시오. 즉, 동일한 공식을 사용하여 면적을 구할 수 있습니다.

우리는 이것을 수정함으로써 이것을 할 수 있습니다 INIT 방법, 만 수락 측면 매개 변수로 해당 측면 값을 생성자에 전달합니다. 구형 클래스입니다.

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
 
class Square(Rectangle):
	def __init__(self, side):
		super().__init__(side, side)

보시다시피 슈퍼 함수는 다음을 통과합니다. 측면 매개변수를 두 번 슈퍼클래스. 말하자면 지나가고 있다. 측면 둘 다 side1side2 이전에 정의된 생성자에.

트라이앵글 클래스

삼각형은 그것을 둘러싸고 있는 사각형의 절반 크기입니다.

삼각형과 사각형의 관계
삼각형과 사각형의 관계(이미지 출처: Varsity 튜터).

따라서 우리는 구형 클래스 및 수정 get_area 밑변의 XNUMX/XNUMX에 높이를 곱한 삼각형 면적 공식과 일치시키는 방법.

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
 
class Triangle(Rectangle):
	def __init__(self, base, height):
		super().__init__(base, height)
 
	def get_area(self):
		area = super().get_area()
		return area / 2

의 또 다른 사용 사례 감독자() 함수는 정의된 메서드를 호출하는 것입니다. 슈퍼클래스 결과를 변수로 저장합니다. 내부에서 벌어지고 있는 일입니다 get_area() 방법.

서클 클래스

공식을 사용하여 원 영역을 찾을 수 있습니다. πr²어디로 r 는 원의 반지름입니다. 즉, 수정해야 합니다. get_area() 그 공식을 구현하는 방법.

참고 : 대략적인 값을 가져올 수 있습니다. π 수학 모듈에서

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …
 
# At the start of the file
from math import pi
 
class Circle(Shape):
	def __init__(self, radius):
		self.radius = radius
 
	def get_area(self):
		return pi * (self.radius ** 2)

위의 코드는 다음을 정의합니다. 다른 생성자를 사용하는 클래스와 get_area() 방법.

이기는하지만 에서 상속 셰이프 클래스에서 모든 단일 메서드를 재정의하고 원하는 대로 속성을 지정할 수 있습니다.

일반 육각형 클래스

우리는 그 넓이를 계산하기 위해 정육각형의 한 변의 길이만 필요합니다. 와 비슷하다 사각형. 생성자에 인수만 전달하는 클래스입니다.

육각 면적 공식
육각 면적 공식 (이미지 출처: BYJU'S)

그러나 공식은 상당히 다르며 제곱근을 사용함을 의미합니다. 그렇기 때문에 당신은 sqrt () 수학 모듈의 함수.

# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …
class Circle(Shape): …
 
# Import square root
from math import sqrt
 
class Hexagon(Rectangle):
	
	def get_area(self):
		return (3 * sqrt(3) * self.side1 ** 2) / 2

수업 테스트

디버거를 사용하여 Python 파일을 실행할 때 대화형 모드로 들어갈 수 있습니다. 이를 수행하는 가장 간단한 방법은 내장 중단점 기능을 사용하는 것입니다.

참고 : 이 기능은 Python 3.7 이상에서만 사용할 수 있습니다.

from math import pi, sqrt
# Folded classes
class Shape: ...
class Rectangle(Shape): ...
class Square(Rectangle): ...
class Triangle(Rectangle): …
class Circle(Shape): …
class Hexagon(Rectangle): …
 
breakpoint()

이제 Python 파일을 실행하고 생성한 클래스를 가지고 놀아보세요.

$ python calculator.py
 
(Pdb) rec = Rectangle(1, 2)(Pdb) print(rec)
The area of this Rectangle is: 2
(Pdb) sqr = Square(4)
(Pdb) print(sqr)
The area of this Square is: 16
(Pdb) tri = Triangle(2, 3)
(Pdb) print(tri)
The area of this Triangle is: 3.0
(Pdb) cir = Circle(4)
(Pdb) print(cir)
The area of this Circle is: 50.26548245743669
(Pdb) hex = Hexagon(3)
(Pdb) print(hex)
The area of this Hexagon is: 23.382685902179844

도전

메소드로 클래스 생성 운영 사용자가 모양을 선택하고 면적을 계산할 수 있는 곳.

챌린지를 완료하면 GitHub 리포지토리에 풀 요청을 보내거나 댓글 섹션에 솔루션을 게시할 수 있습니다.

Python에서 객체 지향 프로그래밍을 배울 준비가 되셨습니까? ✅ 제대로 찾아오셨습니다 😄이야기하려면 클릭

요약

객체 지향 프로그래밍은 문제를 다음과 같이 생각하여 문제를 해결하는 패러다임입니다. 사물. Python OOP를 이해한다면 Java, PHP, Javascript, C#과 같은 언어에도 쉽게 적용할 수 있습니다.

이 기사에서는 다음에 대해 배웠습니다.

  • 파이썬의 객체 지향 개념
  • 구조화된 프로그래밍에 비해 객체 지향의 장점
  • 파이썬에서 객체 지향 프로그래밍의 기초
  • 의 개념 수업 Python에서 사용하는 방법
  • 또한 건설자 파이썬의 클래스
  • 행동 양식속성 파이썬에서
  • OOP의 XNUMX가지 기둥
  • 구현 추출, 상속, 다형성 프로젝트에서

이제 당신에게 달려 있습니다!

이 가이드가 마음에 들면 Python 자습서에 대한 게시물을 확인하십시오.

댓글에 아래 도전 과제에 대한 솔루션을 알려주십시오! 그리고 Python과 PHP 간의 비교 가이드를 확인하는 것을 잊지 마십시오.

관련 기사

0 코멘트
인라인 피드백
모든 댓글보기
맨 위로 가기 버튼