소개
이 프로젝트에서는 은하 제국의 복제 공장에서 복제 병사에게 고유 ID 를 생성하는 Weapon Factory 클래스를 구현하는 방법을 배우게 됩니다. Weapon Factory 클래스는 반복자 (iterator) 로 설계되어 고유 ID 시퀀스를 쉽게 생성하고 관리할 수 있습니다.
👀 미리보기
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다.
- Python 에서 사용자 정의 반복자 클래스를 만드는 방법
- 순차적으로 고유한 16 진수 ID 를 생성하는 방법
- 반복자 클래스를 사용하여 ID 시퀀스를 생성하고 관리하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- Python 에서 사용자 정의 반복자 클래스를 구현할 수 있습니다.
- 순차적으로 고유한 16 진수 ID 를 생성할 수 있습니다.
- 반복자 클래스를 사용하여 ID 시퀀스를 관리할 수 있습니다.
- ID 유효성 검사와 같은 추가 기능으로 반복자 클래스를 향상시킬 수 있습니다.
WeaponFactory 클래스 구현
이 단계에서는 WeaponFactory 클래스를 반복자 클래스로 구현하는 방법을 배우게 됩니다.
- 코드 편집기에서
soldier_generator.py파일을 엽니다. - 다음 요구 사항에 따라
WeaponFactory클래스를 정의합니다.__init__()메서드는 문자열을 인수로 받아야 합니다. 이 인수는 무기 공장의 시작 ID 입니다.__next__()메서드는 시퀀스에서 다음 ID 를 생성해야 합니다. 생성된 ID 는 8 개의 16 진수 문자로 구성된 문자열이어야 합니다.__iter__()메서드는WeaponFactory인스턴스 자체를 반환해야 하므로 클래스를 반복자로 사용할 수 있습니다.
다음은 WeaponFactory 클래스에 대한 코드입니다.
class WeaponFactory:
def __init__(self, start_id):
self.current_id = int(start_id, 16)
def __iter__(self):
return self
def __next__(self):
hex_id = hex(self.current_id)[2:]
self.current_id += 1
return hex_id.zfill(8)
__init__() 메서드에서 start_id 문자열을 16 진수 (base 16) 로 int() 함수를 사용하여 정수로 변환하여 current_id 속성을 초기화합니다.
__next__() 메서드에서는 current_id를 hex() 함수를 사용하여 16 진수 문자열로 변환한 다음 슬라이싱 [2:]을 사용하여 선행 '0x'를 제거하여 다음 ID 를 생성합니다. 그런 다음 current_id를 1 씩 증가시킵니다. 마지막으로, zfill() 메서드를 사용하여 ID 문자열이 항상 8 자 길이이고 필요한 경우 선행 0 으로 채워지도록 합니다.
__iter__() 메서드는 클래스를 반복자로 사용할 수 있도록 WeaponFactory 인스턴스 자체를 반환합니다.
WeaponFactory 클래스 테스트
이제 WeaponFactory 클래스를 구현했으므로 예상대로 작동하는지 테스트해 보겠습니다.
soldier_generator.py파일의if __name__ == "__main__":블록에 다음 코드를 추가합니다.
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf)) ## Output: '1000face'
print(next(wf)) ## Output: '1000facf'
print(next(wf)) ## Output: '1000fad0'
count = 0
max_count = 10
print("------test2-------")
for id in WeaponFactory("1000f000"):
print(id)
count += 1
if count > max_count:
break
soldier_generator.py파일을 저장하고 스크립트를 실행합니다.
python3 soldier_generator.py
출력 결과는 다음과 같아야 합니다.
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
이는 __next__() 메서드가 호출될 때 WeaponFactory 클래스가 예상대로 작동하여 시퀀스에서 다음 ID 를 생성하고, 반복자로 사용될 때 ID 를 반복함을 확인합니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



