파이썬 클래스 팩토리
클래스를 생성하고 반환하는 것이 목적인 간단한 함수를 클래스 팩토리라고 합니다. 강력한 패턴 중 하나인 클래스 팩토리는 Python에서 광범위하게 활용됩니다.
이 자습서에서는 클래스 팩터리를 만드는 데 사용할 수 있는 다양한 방법을 보여줍니다.
Python에서 클래스 팩터리를 만드는 방법
클래스 팩터리를 설계하는 방법에는 두 가지가 있습니다. 하나는 코딩 시간 동안 클래스를 생성하고 다른 하나는 런타임 동안 클래스를 생성합니다.
전자는 class
키워드를 사용하고 후자는 type
키워드를 사용합니다. 이 두 가지 방법은 아래 기사에서 설명하고 대조합니다.
class
키워드를 사용하여 Python에서 클래스 팩토리 생성
class
키워드를 사용하여 클래스 팩토리를 생성할 수 있습니다. 이를 위해 함수를 만들고 함수 정의 내에 클래스를 보유해야 합니다.
다음 코드는 class
키워드를 사용하여 Python에서 클래스 팩터리를 만듭니다.
def ballfun():
class Ball(object):
def __init__(self, color):
self.color = color
def getColor(self):
return self.color
return Ball
Ball = ballfun()
ballObj = Ball("green")
print(ballObj.getColor())
위의 코드는 다음 출력을 제공합니다.
green
type
키워드를 사용하여 Python에서 클래스 팩토리 생성
type
키워드를 사용하면 클래스를 동적으로 생성할 수 있습니다. Python에서 클래스 팩터리를 만들려면 type
키워드를 사용해야 합니다.
그러나 type
키워드를 사용하면 함수가 클래스와 함께 네임스페이스에만 남게 됩니다.
다음 코드는 type
키워드를 사용하여 Python에서 동적 클래스를 만듭니다.
def init(self, color):
self.color = color
def getColor(self):
return self.color
Ball = type(
"Ball",
(object,),
{
"__init__": init,
"getColor": getColor,
},
)
ballGreen = Ball(color="green")
print(ballGreen.getColor())
위의 코드는 다음 출력을 제공합니다.
green
type
키워드는 동적 클래스를 허용하고 런타임에 효과적인 생성 및 단점을 허용합니다. 위의 코드에서 볼 수 있듯이 init
및 getColor
함수는 모두 네임스페이스에 복잡합니다.
또한 type
키워드를 사용하여 동적 클래스를 만들면 이러한 함수의 재사용 가능성도 사라집니다.
이에 대한 쉬운 해결책은 클래스 팩토리를 도입하는 것입니다. 코드의 혼란을 줄이고 기능의 재사용성을 촉진하므로 두 가지 방법 모두에 도움이 됩니다.
다음 코드는 type
키워드를 사용하여 Python에서 클래스 팩터리를 만듭니다.
def create_ball_class():
def init(self, color):
self.color = color
def getColor(self):
return self.color
return type(
"Ball",
(object,),
{
"__init__": init,
"getColor": getColor,
},
)
Ball = create_ball_class()
ballObj = Ball("green")
print(ballObj.getColor())
위의 코드는 다음 출력을 제공합니다.
green
클래스 팩토리를 만드는 방법을 살펴보았으니 이제 새로 배운 클래스 팩토리 개념을 언제 사용하고 언제 사용하지 않는지 구분하는 것도 중요합니다.
일반적으로 클래스 팩토리는 코딩이 발생할 때 어떤 속성이 할당되어야 하는지 모를 때 유용합니다.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn