Introducción
En este proyecto, aprenderás a implementar una clase de Fábrica de Armas que genere identificadores únicos para los soldados clonados en la fábrica de clones del Imperio Galáctico. La clase de Fábrica de Armas está diseñada como un iterador, lo que te permite generar y administrar fácilmente una secuencia de identificadores únicos.
👀 Vista previa
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
🎯 Tareas
En este proyecto, aprenderás:
- Cómo crear una clase de iterador personalizada en Python
- Cómo generar identificadores hexadecimales únicos en secuencia
- Cómo usar la clase de iterador para generar y administrar una secuencia de identificadores
🏆 Logros
Después de completar este proyecto, podrás:
- Implementar una clase de iterador personalizada en Python
- Generar identificadores hexadecimales únicos en secuencia
- Usar una clase de iterador para administrar una secuencia de identificadores
- Mejorar la clase de iterador con características adicionales, como la validación de identificadores
Implementar la clase WeaponFactory
En este paso, aprenderás a implementar la clase WeaponFactory como una clase iteradora.
- Abra el archivo
soldier_generator.pyen su editor de código. - Defina la clase
WeaponFactorycon los siguientes requisitos:- El método
__init__()debe aceptar una cadena como argumento. Este argumento es el ID de inicio de la fábrica de armas. - El método
__next__()debe generar el siguiente ID en secuencia. El ID generado debe ser una cadena de 8 caracteres hexadecimales. - El método
__iter__()debe devolver la instancia deWeaponFactoryen sí misma, para que la clase se pueda usar como un iterador.
- El método
Aquí está el código para la clase 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)
En el método __init__(), inicializamos el atributo current_id convirtiendo la cadena start_id a un entero usando la función int() con una base de 16 (hexadecimal).
En el método __next__(), generamos el siguiente ID convirtiendo el current_id a una cadena hexadecimal usando la función hex(), y luego eliminando el prefijo '0x' usando la segmentación [2:]. Luego incrementamos el current_id en 1. Finalmente, usamos el método zfill() para asegurarnos de que la cadena de ID siempre tenga 8 caracteres de longitud, rellenada con ceros a la izquierda si es necesario.
El método __iter__() simplemente devuelve la instancia de WeaponFactory en sí misma, para que la clase se pueda usar como un iterador.
Probar la clase WeaponFactory
Ahora que has implementado la clase WeaponFactory, probémosla para asegurarnos de que funciona como se espera.
- Agregue el siguiente código al bloque
if __name__ == "__main__":en el archivosoldier_generator.py:
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
- Guarde el archivo
soldier_generator.pyy ejecute el script:
python3 soldier_generator.py
La salida debe ser:
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
Esto confirma que la clase WeaponFactory está funcionando como se espera, generando el siguiente ID en secuencia cuando se llama al método __next__(), y iterando sobre los IDs cuando se usa como un iterador.
Resumen
¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



