Python의 classmethod가 Factory 메서드를 구현하는 데 어떻게 도움이 됩니까?

2860 단어 pythonooptutorial
클래스 메서드에 대해 이야기할 때 메서드는 개체가 아닌 클래스에 한정됩니다. 정적 메서드와 유사하게 클래스 인스턴스를 생성할 필요가 없습니다.

정적 메서드와 클래스 메서드의 주요 차이점은 정적 메서드는 클래스에 대해 아무것도 모르고 매개 변수만 처리하는 반면 클래스 메서드는 매개 변수가 항상 클래스 자체이기 때문에 클래스와 함께 작동한다는 것입니다.

정적 방법

@staticmethod 
def static_function(arg): 
    return arg


The above example shows us that a decorator @staticmethod is followed by a function accepting a single parameter and returns that parameter arg during its function call.



클래스 방법

@classmethod # decorator
def class_function(cls, arg): 
    return cls(arg)


The above example shows us that a decorator @classmethod is followed by a function accepting the class as a parameter along with a parameter named arg so it returns by constructing the class with the parameter arg during its function call.



물 탱크 공장

from abc import ABC, abstractmethod

class WaterTank(ABC):
    @abstractmethod
    def get_capacity(self):
        pass

class WaterTankFactory(WaterTank):
    def __init__(self, capacity):
        self.__capacity = capacity
    def get_capacity(self):
        return self.__capacity
    @classmethod
    def set_capacity(cls, capacityRequired):
        return cls(capacityRequired)


추상 메서드 get_capacity()(개인 변수를 검색하기 위한 getter 함수)를 사용하여 WaterTank라는 클래스를 추상 클래스로 생성해 보겠습니다.

이제 물 탱크를 생산할 WaterTankFactory라는 이름의 팩토리 클래스를 생성하겠습니다.

You see as Factories helps us to manufacture products, Factory methods inside a Factory class helps us to create or construct Products in our case we call them Objects or instance of a class.



우리 코드에서 우리는 클래스 메서드를 팩토리 메서드로 사용할 것입니다. set_capacity() 메서드 전에 @classmethod를 사용하면 set_capacity() 메서드가 클래스를 인수로 받아들인다는 뜻입니다.

물탱크 제조

We are going to create two tanks namely tankOne and tankTwo.



tankOne = WaterTankFactory.set_capacity(500)
print(f'Capacity of tankOne is {tankOne.get_capacity()} Litre')

tankTwo = WaterTankFactory.set_capacity(100)
print(f'Capacity of tankTwo is {tankTwo.get_capacity()} Litre')


이제 WaterTankFactory 클래스를 직접 사용하여 물탱크의 용량을 설정하는 데 도움이 되는 팩토리 메서드 set_capacity()에 액세스할 수 있습니다. Python 3의 클래스 메서드를 사용하여 이 팩토리 메서드를 구현했기 때문에 클래스를 구성하고 반환하는 데 도움이 됩니다. 개체로. 이렇게 하면 사용자가 원하는 것의 소비자가 되도록 사용자의 추상화 및 이점을 보존하여 객체 인스턴스를 사용자로부터 직접 팩토리 메서드로 전달하는 것을 방지할 수 있습니다.

산출
Capacity of tankOne is 500 Litre
Capacity of tankTwo is 100 Litre

내 개인 블로그 방문 @danyson.github.io

좋은 웹페이지 즐겨찾기