Python 추상 속성
이 자습서에서는 abc
또는 추상 기본 클래스 모듈을 사용하여 Python에서 추상 속성이 있는 클래스를 만드는 방법에 대해 설명합니다.
Python 추상 속성
객체 지향 프로그래밍의 추상화는 사용자에게 불필요한 정보를 숨기는 데 사용됩니다. 기능의 내부 작동은 사용자에게 숨겨지지만 사용자는 기능을 사용하여 작업을 수행할 수 있습니다.
예를 들어, 우리는 컴퓨터 소프트웨어를 사용하여 다른 작업을 수행하지만 소프트웨어가 작업을 수행하는 방법을 모릅니다. 우리는 소프트웨어에 입력만 제공하고 출력을 얻습니다.
파이썬에서 추상화를 사용하여 관련 없는 정보를 숨겨 프로그램의 복잡성을 줄일 수 있습니다.
하나 이상의 추상 메서드가 포함된 클래스는 추상 클래스가 됩니다. 추상 메소드는 하위 클래스에서 정의되며 추상 클래스는 다른 클래스의 청사진이기 때문에 하위 클래스에서 상속됩니다.
Python에서는 abc
모듈 또는 추상 기본 클래스 모듈을 사용하여 추상 클래스를 구현할 수 있습니다. 추상 기본 클래스는 하위 클래스에 대한 인터페이스를 제공하며 코드가 크고 모든 클래스를 기억하기 어려울 때 유용합니다.
기본 클래스에서 abc
모듈을 가져와 기본 클래스 메서드를 추상으로 장식하는 데 사용해야 합니다. 추상 메서드를 정의하려면 기본 클래스에서 메서드를 정의하기 전에 @abstractmethod
데코레이터를 사용할 수 있으며 @property
데코레이터를 사용하여 메서드를 추상 속성으로 만들 수 있습니다.
예를 들어 abc
모듈을 가져오고 ABC 클래스에서 상속될 Bike
클래스를 생성해 보겠습니다. Bike
클래스 내에서 mileage()
라는 추상 메소드를 생성합니다.
이제 기본 클래스를 상속하여 추상 메서드로 다른 하위 클래스를 구현할 수 있습니다. 아래 코드를 참조하십시오.
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
def mileage(self):
print("The mileage is 20kmph")
class CD70(Bike):
def mileage(self):
print("The mileage is 15kmph ")
class CD150(Bike):
def mileage(self):
print("The mileage is 34kmph ")
# Main Code
h = Honda()
h.mileage()
r = CD70()
r.mileage()
s = CD150()
s.mileage()
출력:
The mileage is 20kmph
The mileage is 15kmph
The mileage is 34kmph
위의 코드에서 하위 클래스의 개체를 만든 다음 해당 메서드 mileage()
를 호출하여 자전거의 마일리지를 인쇄합니다. Bike
클래스에도 mileage()
메소드가 있지만 메소드가 추상적이기 때문에 호출할 수 없습니다.
예를 들어 위의 예제를 반복하여 Bike
클래스의 mileage
메서드를 호출해 보겠습니다. 아래 코드를 참조하십시오.
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
def mileage(self):
print("The mileage is 20kmph")
class CD70(Bike):
def mileage(self):
print("The mileage is 15kmph ")
class CD150(Bike):
def mileage(self):
print("The mileage is 34kmph ")
# Main Code
b = Bike()
b.mileage()
출력:
TypeError: Can't instantiate abstract class Bike with abstract methods mileage
위의 코드는 추상 클래스인 Bike
가 추상 메서드를 가지고 있음을 명확하게 보여줍니다. 따라서 해당 객체를 생성할 수 없고 해당 메서드를 호출할 수 없습니다.
첫 번째 메서드 정의 전에 @abstractmethod
데코레이터를 사용하여 다른 클래스의 메서드를 추상 메서드로 만들 수도 있습니다. 메서드에 액세스하기 위해 해당 클래스의 개체를 만들려고 하면 Python에서 오류가 발생합니다.
예를 들어 하위 클래스 추상화의 메서드를 만들어 보겠습니다. 아래 코드를 참조하십시오.
# Class Code
from abc import ABC, abstractmethod
class Bike(ABC):
@property
@abstractmethod
def mileage(self):
pass
class Honda(Bike):
@abstractmethod
def mileage(self):
print("The mileage is 20kmph")
def mileage2(self):
print("The mileage is 200 kmph")
# Main Code
b = Honda()
b.mileage2()
출력:
TypeError: Can't instantiate abstract class Honda with abstract methods mileage
Honda
클래스에 두 가지 메서드를 정의했지만 클래스가 추상적이기 때문에 어느 것도 액세스할 수 없습니다. 추상 기본 클래스에 대한 자세한 내용은 이 링크를 확인하십시오.