Refactorización del código de Python en Visual Studio

La reutilización del código existente y la actualización de código son tareas comunes para los desarrolladores. Puede que quiera refactorizar el código existente para otro propósito y ahorrar tiempo sin tener que escribir todo el código nuevo. Puede que quiera limpiar el código para quitar elementos no utilizados o actualizar importaciones y métodos para que estén actualizados con versiones recientes.

Visual Studio proporciona varios comandos para ayudarle a transformar y limpiar automáticamente el código fuente de Python:

Requisitos previos

  • Visual Studio. Para instalar el producto, siga los pasos descritos en Instalación de Visual Studio.
  • Acceso a un proyecto de código de Python con código existente.

Cambio del nombre de una clase, un método o una variable

Puede usar el comando Rename para cambiar el nombre de un identificador específico, incluida una clase, un método o una variable. Visual Studio admite la actualización de todas las instancias del identificador o solo las instancias específicas que indique.

En los pasos siguientes se muestra cómo usar el comando Rename en el código.

  1. En el código, haga clic con el botón derecho en el identificador cuyo nombre desea cambiar y seleccione Cambiar nombre. También puede colocar el símbolo de intercalación en un identificador y seleccionar Editar>Refactorizar>Cambiar nombre en el menú o usar el método abreviado del teclado F2.

  2. En el cuadro de diálogo Cambiar nombre, escriba el nuevo nombre del identificador y seleccione OK:

    Screenshot that shows how to specify a different name for an identifier in Visual Studio 2019.

  3. En el cuadro de diálogo siguiente, seleccione los archivos e instancias del código que deben usar el nuevo nombre. Puede seleccionar una instancia individual para obtener una vista previa del cambio específico:

    Screenshot that shows how to apply the new name to specific instances of an identifier and preview the changes in Visual Studio 2019.

  4. Seleccione Apply (Aplicar) para realizar los cambios en los archivos de código fuente.

  1. En el código, haga clic con el botón derecho en el identificador cuyo nombre desea cambiar y seleccione Cambiar nombre. También puede colocar el símbolo de intercalación en un identificador y seleccionar Editar>Refactorizar>Cambiar nombre en le menú o utilizar el método abreviado del teclado Ctrl+R.

  2. En el cuadro de diálogo Cambiar nombre, escriba el nuevo nombre para el identificador seguido de Entrar:

    Screenshot that shows how to specify a different name for an identifier in Visual Studio 2022.

Adición de una instrucción de importación

Si tiene identificadores en el código a los que les falta información de definiciones o tipos auxiliares, Visual Studio puede ayudarle a corregir el problema. Al colocar el símbolo de intercalación en un identificador que carece de información, Visual Studio muestra una etiqueta inteligente (bombilla) a la izquierda del código. La etiqueta enumera los comandos para agregar las instrucciones import o from ... import necesarias para el identificador correspondiente.

Los pasos siguientes muestran cómo trabajar con la etiqueta inteligente para agregar importaciones en el código.

  1. En el código, coloque el símbolo de intercalación en un identificador para el que Visual Studio muestra la etiqueta inteligente (bombilla). En este ejemplo, la etiqueta inteligente se muestra para la llamada al módulo matemático:

    Screenshot that shows the smart tag for an identifier that needs an import statement added in Visual Studio 2019.

    Screenshot that shows the smart tag for an identifier that needs an import statement added in Visual Studio 2022.

  2. En el menú de etiqueta inteligente, seleccione el comando para agregar la información necesaria del módulo o del tipo al archivo de código. En este ejemplo, se ha seleccionado el comando para agregar la instrucción import math.

    Visual Studio ofrece finalizaciones de import para paquetes de nivel superior y módulos en el proyecto actual y la biblioteca estándar. Visual Studio también ofrece finalizaciones de from ... import para submódulos y subpaquetes, así como para miembros de módulo. Las finalizaciones incluyen funciones, clases o datos exportados.

  3. Después de seleccionar una opción, confirme que el cambio esperado se realiza en el archivo.

    Visual Studio agrega la instrucción import en la parte superior del archivo del código, detrás de otras importaciones, o a una instrucción from ... import existente, si ya se importó el mismo módulo. En este ejemplo, la instrucción import math se agrega en la parte superior del archivo después de las demás importaciones:

    Screenshot that shows the import statement added after running the command from the smart tag in Visual Studio 2019.

    Screenshot that shows the import statement added after running the command from the smart tag in Visual Studio 2022.

Visual Studio intenta filtrar los miembros que no están definidos en un módulo. Un ejemplo es como un módulo importado en otro módulo que no es un elemento secundario del módulo de importación. Muchos módulos usan la instrucción import sys en lugar de from xyz import sys. No verá una finalización para importar el módulo sys desde otros módulos, aunque a los módulos les falte un miembro __all__ que excluye el módulo sys.

De forma similar, Visual Studio filtra las funciones que se importan desde otros módulos o el espacio de nombres integrado. Si un módulo importa la función settrace desde el módulo sys, en teoría, podría importar la función desde ese módulo. Sin embargo, el mejor enfoque es usar la instrucción import settrace from sys directamente, por lo que Visual Studio ofrece específicamente esa instrucción.

Por último, supongamos que normalmente se excluye un módulo, pero tiene otros valores que se incluyen como un nombre asignado con un valor en el módulo. Visual Studio sigue excluyendo la importación. En este comportamiento se supone que el valor no se debe exportar porque se define en otro módulo. Es probable que otra asignación sea un valor ficticio que tampoco se exporte.

Quitar importaciones no usadas

Al escribir código, resulta fácil terminar con instrucciones import para módulos que no se usan en absoluto. Dado que Visual Studio analiza el código, puede determinar automáticamente si una instrucción import es necesaria; basta con que vea si el nombre importado se usa dentro del ámbito después de que se produzca la instrucción.

En los pasos siguientes se muestra cómo quitar las importaciones sin usar en el código.

  1. Use el botón derecho en cualquier lugar del editor y seleccione Quitar importaciones. Puede quitar la importación de Todos los ámbitos o solo del Ámbito actual.

    Screenshot that shows how to access the Remove Imports menu in Visual Studio 2019.

    Visual Studio determina si hay módulos no utilizados en el código y quita las instrucciones import correspondientes.

  2. Después de seleccionar una opción, confirme que los cambios esperados se realizan en el archivo. En este ejemplo, Visual Studio quita los tres módulos no usados: binascii, array y glob.

    Screenshot that shows the results of using the Remove Imports command to remove unused modules from the code in Visual Studio 2019.

  1. En el código, coloque el símbolo de intercalación en una instrucción import para la que Visual Studio muestra la etiqueta inteligente (bombilla). En este ejemplo, la etiqueta inteligente se muestra para los módulos no usados binascii, array y glob:

    Screenshot that shows how to access options to remove unused imports in Visual Studio 2022.

  2. Seleccione la opción Quitar todas las importaciones sin usar o Quitar importación sin usar para quitar solo el módulo seleccionado.

  3. Después de seleccionar una opción, confirme que los cambios se realizan en el archivo. En este ejemplo, Visual Studio quita los tres módulos no usados: binascii, array y glob.

    Screenshot that shows the results of using the Remove all unused imports command in Visual Studio 2022.

Consideraciones al usar comandos de refactorización

Antes de usar los comandos de refactorización, revise las consideraciones siguientes.

  • Después de ejecutar un comando de refactorización, puede revertir los cambios con el comando Editar>Deshacer. El comando Cambiar nombre ofrece una característica de Vista previa, por lo que puede ver los cambios antes de aplicarlos.

  • Visual Studio no tiene en cuenta el flujo de control en el código. Si usa un identificador antes de que la definición auxiliar esté presente en el código, como una instrucción import, Visual Studio seguirá procesando el identificador tal como se usa. Visual Studio espera encontrar definiciones auxiliares para identificadores antes de realizar llamadas y asignaciones.

  • Visual Studio omite todas las instrucciones de importación from __future__. Estas instrucciones son importaciones realizadas dentro de una definición de clase o mediante instrucciones from ... import *.