programacion poo otra orientada objetos metodo llamar instancia importar herencia clases clase python namespaces python-3.x reserved-words naming-conventions

python - poo - ¿Es una mala práctica usar un nombre de función incorporado como un atributo o identificador de método?



poo python 3 (3)

Sé que nunca debe usar nombres de funciones incorporadas como identificadores de variables.

¿Pero hay alguna razón para no usarlos como identificadores de atributo o método?

Por ejemplo, ¿es seguro escribir my_object.id = 5 , o definir un dict método de instancia en mi propia clase?


No confundirá al intérprete, pero puede confundir a las personas que leen su código. Se debe evitar el uso innecesario de nombres compilados para atributos y métodos.

Otro mal efecto es que los builtins sombreados confunden los marcadores de sintaxis en la mayoría de los editores que tienen en cuenta python (vi, emacs, pydev, inactivo, etc.). Además, algunas de las herramientas de pelusa alertarán sobre esta práctica.


No, esta bien. Dado que se requiere una referencia de objeto, no hay forma de hacer que sombreen la función incorporada.


Sí, es una mala práctica. Puede que no rompa nada de inmediato, pero aún perjudica la legibilidad del código.

Para cotizar de manera selectiva desde PEP20:

Hermoso es mejor que feo.
Simple es mejor que complejo.
La legibilidad cuenta
Si la implementación es difícil de explicar, es una mala idea.

Al ver una llamada a myobject.dict() , sería natural suponer que va a devolver myobject.__dict__ , o que myobject.id() devuelve lo mismo que id(myobject)

Es posible que descubran que están equivocados; pero eso llevará tiempo y esfuerzo y probablemente conduzca a algunos errores mientras lo resuelven. Llamar a su atributo myobject.object_id_number es mucho más largo, pero deja en claro que es diferente de id(myobject)