LLM FullStacker/Python
[Python] classmethod에서 cls로 감싸 반환하기
Peter Note
2024. 8. 11. 14:26
return cls(messages, template_format=template_format)
는 Python에서 클래스 메소드나 다른 클래스 내부 메소드에서 새로운 클래스 인스턴스를 생성하여 반환할 때 사용되는 패턴입니다. 이 문장에서 cls
는 현재 클래스 자체를 가리키고, messages
와 template_format
은 그 클래스의 생성자 __init__
메소드에 전달되는 인수입니다.
이 코드의 의미
cls
:cls
는 클래스 메소드 또는 클래스 내부의 다른 메소드에서 해당 클래스 자체를 참조하는 키워드입니다.cls
를 사용하면 현재 클래스의 인스턴스를 생성할 수 있습니다.- 일반적으로
@classmethod
데코레이터가 붙은 메소드 내에서 사용되며, 이 메소드가 호출될 때 해당 클래스 자체가 첫 번째 인수로cls
에 전달됩니다.
cls(messages, template_format=template_format)
:- 이 구문은 현재 클래스의 인스턴스를 생성하는 표현입니다.
messages
와template_format=template_format
은 생성자에 전달되는 인수입니다. 여기서messages
는 위치 인수로,template_format
은 키워드 인수로 전달됩니다.- 이는 클래스의
__init__
메소드가messages
와template_format
이라는 두 개의 인수를 받을 것으로 예상된다는 것을 의미합니다.
return
:- 새로 생성된 클래스 인스턴스를 반환합니다. 이 반환된 객체는 이 메소드를 호출한 코드에서 사용할 수 있게 됩니다.
예시 코드
아래는 이 패턴이 어떻게 사용되는지에 대한 예시입니다:
class PromptTemplate:
def __init__(self, messages, template_format=None):
self.messages = messages
self.template_format = template_format
@classmethod
def from_messages(cls, messages, template_format="default"):
# 새로운 PromptTemplate 인스턴스를 생성하여 반환
return cls(messages, template_format=template_format)
# 사용 예시
messages = ["Hello, World!", "How are you?"]
template = PromptTemplate.from_messages(messages, template_format="custom")
print(template.messages) # ['Hello, World!', 'How are you?']
print(template.template_format) # 'custom'
요약
return cls(messages, template_format=template_format)
는 현재 클래스의 인스턴스를 생성하여 반환하는 코드입니다.cls
는 해당 클래스 자체를 참조하며, 이 코드 구문은 클래스 메소드 또는 클래스 내부의 다른 메소드에서 새로운 인스턴스를 생성하기 위해 사용됩니다.- 이 패턴은 클래스의
__init__
메소드가 해당 인수들을 받아들일 것으로 예상합니다. 따라서 이 코드가 사용되는 클래스는__init__
메소드가messages
와template_format
을 인수로 받아야 합니다.