Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 상속:단계별 가이드

Python 상속은 하위 클래스가 다른 클래스의 코드를 사용하는 경우입니다. 상속은 코딩을 더 쉽고 효율적으로 만드는 Python과 같은 객체 지향 언어의 필수 기능입니다.


Python은 객체 지향 언어입니다. 즉, 코드를 보다 효율적으로 만드는 데 도움이 되는 재사용 가능한 코드 블록 생성을 지원합니다. 이러한 일이 발생하는 방법 중 하나는 상속을 통해 하나의 하위 클래스가 다른 클래스의 코드를 사용할 수 있는 것입니다.

예를 들어, "은행 계좌"를 저장하는 클래스가 있고 "은행 계좌" 기존 클래스의 속성을 참조할 수 있는 "골드 은행 계좌"를 저장하는 서브클래스를 생성하고자 할 수 있습니다.

이 튜토리얼에서는 Python에서 상속의 기본 사항을 분석할 것입니다. 또한 상위 및 하위 Python 클래스가 작동하는 방식과 클래스 객체로 작업할 때 속성 및 메서드를 재정의하는 방법에 대해서도 논의할 것입니다.

파이썬 상속

상속은 다른 클래스 내에서 Python 클래스를 설명하는 데 사용되는 용어입니다. subclasses라는 클래스 또는 child classes parent classes에서 값을 상속할 수 있습니다. , 아이들이 현실 세계에서 부모로부터 특성을 물려받는 것과 유사합니다.

상속은 subclasses를 생성할 수 있기 때문에 유용합니다. 이러한 유형을 여러 번 선언할 필요 없이 상위 클래스와 동일한 값 유형을 갖습니다.

부모 수업

상위 클래스(base classes라고도 함) 하위 클래스가 액세스할 수 있는 마스터 구조를 만듭니다. 부모 클래스에서 파생된 클래스 메서드와 동일한 공통 값 집합을 다시 선언하지 않고도 여러 하위 클래스를 만들 수 있습니다.

이것이 실제로 어떻게 작동하는지 예를 들어 설명하겠습니다. 부모와 자식이라는 두 가지 다른 은행 계좌 유형에서 작동하는 프로그램이 있다고 가정해 보겠습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

이 두 계좌는 모두 은행 계좌이므로 유사한 값을 갖습니다. 그러나 이러한 각 계정에는 고유한 정보가 필요할 수 있습니다. 예를 들어, 부모의 계정은 당좌 대월을 지원하는 반면 자녀의 계정은 잔액으로만 작동할 수 있습니다.

따라서 이러한 값을 사용하여 프로그램을 만들려면 먼저 은행 계좌에 대한 클래스(부모 클래스)를 정의한 다음 지원하려는 두 가지 유형의 은행 계좌(부모 및 자식)에 대한 자식 클래스를 만듭니다.

다음은 은행 계좌에 대한 부모 클래스를 선언하는 예입니다.

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

BankAccount 클래스를 만들었습니다. 이름, 성 및 균형의 세 가지 값을 저장합니다. 다음과 같이 클래스에 메서드를 추가할 수도 있습니다.

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

	def getDetails(self):
		print("Forename: ", self.forename)
		print("Surname: ", self.surname)

	def getBalance(self):
		print("Balance: $ ", self.balance)

우리 클래스는 이제 세 가지 값과 두 가지 새로운 메서드인 세부 정보와 균형을 저장합니다. details 메소드는 계정 소유자의 이름과 성을 찾는 데 사용할 수 있으며 balance 메소드는 계정 소유자의 잔액을 반환합니다.

BankAccount에서 선언하는 모든 메소드와 변수 클래스는 우리 자식 클래스에서 액세스할 수 있습니다.

실제 수업을 설명하기 위해 은행 계좌의 예를 만들어 보겠습니다. 다음 코드를 사용하여 그렇게 할 수 있습니다.

account = BankAccount("John", "Appleseed", 100)

John Appleseed의 계정이 생성됩니다. 100달러가 들어 있습니다. 이제 계정이 준비되었으므로 다른 클래스와 마찬가지로 계정을 참조할 수 있습니다. 다음은 getBalance()를 실행하는 예입니다. 은행 계좌 내에서 우리가 얼마나 많은 돈을 가지고 있는지 확인하는 방법:

print(account.getBalance())

우리 프로그램은 다음을 반환합니다:

Balance: $ 100

어린이 수업

위의 예에서 우리는 은행 계좌를 저장하는 부모 클래스를 선언했습니다. 하지만 18세 미만 어린이의 계정과 같은 특정 유형의 계정에 대한 정보를 저장하려면 어떻게 해야 할까요? 바로 여기에서 어린이 수업이 시작됩니다.

하위 클래스 또는 하위 클래스는 상위 클래스에서 값을 상속합니다. 즉, 각 자식 클래스는 부모 클래스에서 선언한 메서드와 변수를 참조할 수 있습니다.

따라서 ChildBankAccount에 대한 자식 클래스를 만들고 싶다고 가정해 보겠습니다. . 이 계정은 사용자의 은행 계좌 정보(이름 및 잔액)를 반환할 수 있어야 하며 restricted라는 새 값도 있어야 합니다. . 이 값은 만 18세 미만이고 전체 은행 계좌를 사용할 수 없기 때문에 자녀의 계정에 저장됩니다.

자식 클래스를 생성하기 위해 다음 코드를 사용할 수 있습니다:

class ChildBankAccount(BankAccount):

ChildBankAccount 클래스는 BankAccount의 자식이 됩니다. BankAccount 때문에 클래스 괄호로 묶입니다. 자식 클래스가 부모 클래스와 정확히 같은 값을 갖도록 하려면 BankAccountpass를 사용할 수 있습니다. 다음과 같은 키워드:

class ChildBankAccount(BankAccount):
	pass

그러나 앞서 논의한 바와 같이, 우리의 자식 계정은 특별한 값을 저장해야 할 것입니다:사용자의 계정이 제한된다는 변수입니다.

이 목표를 달성하기 위해 restricted라는 새 값을 추가할 것입니다. 우리 아이 반에. 다음 코드를 사용하여 이 작업을 수행할 수 있습니다.

class ChildBankAccount(BankAccount):
	def __init__(self, forename, surname, balance, restricted=True):
self.forename = forename
self.surname = surname
self.balance = balance
self.restricted = restricted

	def isRestricted(self):
		print("This account is restricted as the user is under 18.")

이제 코드를 분석해 보겠습니다.

위의 코드에서 우리는 ChildBankAccounts가 네 가지 값(이름, 성, 잔액 및 제한)을 보유하기를 원한다고 명시합니다.

처음 세 개(이름, 성 및 균형)는 상위 클래스 값과 동일하지만 restricted 새로운 기능이며 우리 어린이 클래스 전용입니다. 기본적으로 restricted True로 설정됨 .

따라서 표준 BankAccount를 생성하면 (ChildBankAccount 아님 ), restricted에 액세스할 수 없습니다. 값. 마찬가지로 isRestricted에 액세스할 수 없습니다. ChildBankAccount를 생성하지 않는 한 메소드 .

다음은 ChildBankAccount를 만드는 예입니다. getBalance() 사용 및 isResticted() 수업에 대해 자세히 알아보는 방법:

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())
print(child_account.isRestricted())

코드는 다음을 반환합니다.

Balance: $ 100
This account is restricted as the user is under 18.

보시다시피 프로그램은 먼저 새 ChildBankAccount를 정의합니다. Bill Appleseed용 , 계정에 $100가 있습니다. 그런 다음 우리 프로그램은 getBalance()를 실행합니다. 사용자의 잔액을 반환하는 클래스의 메서드입니다. getBalance() 상위 클래스인 BankAccount에서 선언됩니다. , 그러나 ChildBankAccount에 액세스할 수 있습니다. 상속을 통해 .

우리 프로그램은 isRestricted()도 실행합니다. 이 메서드는 자녀의 계정이 18세 미만이므로 제한됨을 나타냅니다. 이 클래스는 ChildBankAccount에 선언되어 있습니다. 하지만 이는 상위 클래스인 BankAccount에 액세스할 수 없음을 의미합니다. . 제한된 BankAccount를 생성하려는 경우 , 부모 클래스를 변경해야 합니다.

상위 메소드 재정의

위의 예에서 BankAccount라는 상위 클래스를 선언했습니다. 은행 계좌에 대한 정보를 저장합니다. 또한 ChildBankAccount라는 하위 클래스도 만들었습니다. 18세 미만의 계정 소유자에 대한 정보를 저장합니다. 이 클래스는 BankAccount에서 메소드를 상속했습니다. 클래스를 만들고 isRestricted()도 만들었습니다. 방법.

하지만 기존 부모 클래스 메서드를 수정하려면 어떻게 해야 할까요? BankAccount가 필요하다고 가정해 보겠습니다. 잔액이 있는 메시지를 반환하고 You are eligible for an overdraft라는 메시지를 반환합니다. 하지만 ChildBankAccount에 대해 이것이 표시되는 것을 원하지 않습니다. 보유자.

이렇게 하려면 부모 메서드를 재정의해야 합니다.

수정된 상위 메서드인 BankAccount의 코드는 다음과 같습니다. , 이제 계정 소유자에게 잔액을 확인할 때 당좌 대월에 대한 자격이 있다는 메시지를 인쇄합니다.

class BankAccount:
	def __init__(self, forename, surname, balance):
		self.forename = forename
		self.surname = surname
		self.balance = balance

	def getDetails(self):
		print("Forename: ", self.forename)
		print("Surname: ", self.surname)

	def getBalance(self):
		print("Balance: $ ", self.balance)
		print("You are eligible for an overdraft.")

이제 새 BankAccount를 생성하면 John Appleseed용 잔액을 인쇄하면 You are eligible for an overdraft라는 메시지가 표시됩니다. . 다음은 새 계정을 선언하고 잔액을 확인하는 예입니다.

account = BankAccount("John", "Appleseed", 100)
print(account.getBalance())

코드는 다음을 반환합니다.

Balance: $ 100
You are eligible for an overdraft.

그러나 이 변경은 또한 ChildBankAccount , BankAccount에서 값을 상속합니다. , 메시지도 표시됩니다. 다음은 ChildBankAccount를 만드는 예입니다. BankAccount 상위 클래스가 변경되었습니다:

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())

코드 반환:

Balance: $ 100
You are eligible for an overdraft.

일반적으로 어린이는 초과 인출이 허용되지 않으므로 코드를 변경해야 합니다. 이제 그렇게 하려면 ChildBankAccount를 수정해야 합니다. 클래스를 만들고 새로운 getBalance() 선언 기능.

다음은 ChildBankAccount의 코드입니다. 위에서:

class ChildBankAccount(BankAccount):
	def __init__(self, forename, surname, balance, restricted=True):
self.forename = forename
self.surname = surname
self.balance = balance
self.restricted = restricted

	def isRestricted(self):
		print("This account is restricted as the user is under 18.")

새 함수를 추가하려면 이 코드를 변경해야 합니다. getBalance() . 이 함수는 부모 클래스에서 선언한 것과 같은 방식으로 작동하지만 초과 인출에 대한 메시지는 포함하지 않습니다. 새 함수를 선언하기 위해 추가할 코드는 다음과 같습니다.

…

def getBalance(self):
 print("Balance: $ ", self.balance)

이제 자녀의 잔액을 검색해 보겠습니다.

child_account = ChildBankAccount("Bill", "Appleseed", 100) 
print(child_account.getBalance())

코드는 다음을 반환합니다.

Balance: $ 100

위의 예에서 우리는 getBalance()를 덮어썼습니다. ChildBankAccount의 메소드 어린이 수업. 새로운 getBalance() ChildBankAccount 메소드 사용자의 잔액만 표시합니다. 하지만 BankAccount에서 클래스, getBalance() 메소드는 사용자의 잔액과 You are eligible for an overdraft 메시지를 모두 보여줍니다. .

부모 메서드 재정의는 부모와 유사한 메서드를 사용할 수 있지만 고유한 특정 변경이 필요한 자식 메서드가 여러 개 있는 경우 유용할 수 있습니다. 위의 경우와 같이 상위 은행 계좌에는 초과인출 메시지가 표시되지만 하위 은행 계좌는 표시되지 않기를 원하므로 ChildBankAccount에서 상위 메소드를 재정의했습니다. .

결론

상속은 개체 지향 프로그래밍에서 부모 클래스에 이미 선언된 값을 저장할 수 있는 하위 클래스를 만드는 데 사용됩니다. 이는 코드를 여러 번 반복하지 않고도 상속을 사용하여 해당 클래스를 생성할 수 있기 때문에 유사한 값을 저장할 유사한 클래스를 생성할 때 유용합니다.

이 자습서에서는 Python에서 상속의 역할을 살펴보았습니다. 또한 상속과 부모 및 자식 클래스가 작동하는 방식에 대해 논의한 다음 부모 메서드를 재정의하는 방법을 살펴보았습니다. 이제 Python 전문가처럼 클래스 및 상속 작업을 할 준비가 되었습니다!