2009-04-02 16 views

Respuesta

95

Just nib. Nombra el Nib de clase, con una N mayúscula. Para obtener más información sobre las convenciones de nomenclatura y otros consejos de estilo, consulta PEP 8, la guía de estilo de Python.

+2

¿La mayoría de los proyectos de Python siguen esta convención? Porque veo que las clases integradas están en minúsculas, p. lista, cadena, etc. –

+4

Observación w.r.t. los tipos incorporados son correctos. Estas son decididamente excepciones, sin embargo. La mayoría de las otras clases definidas en la biblioteca estándar * están * en mayúscula. – Stephan202

+2

Pensé que esta era la convención correcta, pero hay un problema inherente con ella, al menos me parece a mí. Digamos que tengo una clase llamada 'Client', y es comprensible que a menudo haga instancias de eso que quiero llamar' client'. Pero de acuerdo con su convención, el nombre del módulo sería 'client', por lo que siempre tendría que nombrar mis instancias como algo antinatural como' client_instance'. ¿Qué piensas de este problema? – Ray

34

Lo llamaría nib.py. Y también nombraría la clase Nib.

En un proyecto python más grande en el que estoy trabajando, tenemos muchos módulos que definen básicamente una clase importante. Las clases se nombran comenzando con una letra mayúscula. Los módulos se nombran como la clase en minúsculas. Esto lleva a importaciones como las siguientes:

from nib import Nib 
from foo import Foo 
from spam.eggs import Eggs, FriedEggs 

Es como emular el modo Java. Una clase por archivo. Pero con la flexibilidad adicional, siempre puedes agregar otra clase a un solo archivo si tiene sentido.

21

plumilla está bien. Si tiene dudas, consulte la guía de estilo de Python.

De PEP 8:

paquete y el módulo de Nombres módulos deben tener, los nombres de todos los cortos-minúsculas. Los subrayados se pueden usar en el nombre del módulo si mejora la legibilidad. Los paquetes de Python deben tener también tienen nombres cortos en minúsculas, aunque el uso de caracteres de subrayado es desaconsejado.

Desde nombres de los módulos se asignan a los nombres de archivo, y algunos sistemas de archivos son sensible a mayúsculas y truncar los nombres largos, es importante que el módulo nombres serán elegidos para ser bastante corto - esto no será un problema en Unix , pero puede ser un problema cuando el código se transporta a versiones anteriores de Mac o de Windows o DOS.

Cuando un módulo de extensión escrito en C o C++ tiene un módulo que acompaña Python que proporciona un nivel más alto (por ejemplo, más orientado a objetos) interfaz, el/C++ módulo C tiene un subrayado inicial (por ejemplo _socket).

+1

uhm ... esto me golpea en el estómago. Estoy usando el prefijo de guión bajo en paquetes/módulos para algo completamente diferente (se trata de una referencia de monty python). –

25

sé mi solución no es muy popular desde el punto de vista Pythonic, pero yo prefiero usar el enfoque de Java de uno módulo-> una clase, con el módulo denominado como la clase. Entiendo la razón detrás del estilo python, pero no me gusta mucho tener un archivo muy grande que contenga muchas clases. Me resulta difícil navegar, a pesar de doblar.

Otra razón es el control de versiones: tener un archivo grande significa que sus confirmaciones tienden a concentrarse en ese archivo. Esto puede llevar a una mayor cantidad de conflictos a resolver. También pierde la información de registro adicional que su confirmación modifica archivos específicos (por lo tanto, involucra clases específicas). En su lugar, ve una modificación en el archivo del módulo, con solo el comentario de compromiso para comprender qué modificación se ha realizado.

Resumiendo, si prefieres la filosofía python, ve por las sugerencias de las otras publicaciones. Si prefieres la filosofía tipo java, crea un Nib.py que contenga Nib de clase.

+1

Los problemas mencionados se deben a limitaciones en el editor y al uso de herramientas de control de versiones, no por el lenguaje o el estilo de programación. Una clase por archivo es perjudicial para la estructura del código. Use 'spyder' o un editor similar para ver un resumen de sus clases para ayudar a la navegación, y dos paneles con el mismo archivo abierto en ambos. Además, lea PEP8. Python es para escribir Python y Java para Java, pero Python no * es * para escribir Java. –

+4

@IoannisFilippidis: si tuviera que colocar todas las clases para un módulo en un solo archivo en los tamaños de código que normalmente administro, ni siquiera podría abrir el archivo, las colisiones con otros colegas se dispararían, y mi jefe escupiría mi rostro (en sentido figurado, eso es todo) por proponerlo. Un enfoque de archivo único no escala, PEP-8 o no. –

+0

@StefanoBorini: PEP8 no requiere un enfoque de archivo único. Una clase por módulo y un archivo por (unidad de código) son dos extremos de un espectro muy amplio. Si está viendo tamaños de archivos inmanejablemente grandes con un archivo por módulo, quizás debería considerar revisar su enfoque para dividir un paquete en módulos. –

0

foo módulo en Python sería el equivalente a un archivo clase Foo en Java

o

foobar módulo en Python sería el equivalente a un archivo de clase FooBar en Java

Cuestiones relacionadas