Una buena regla general es que los nombres de los métodos deben ser verbos o predicados de modo que el objeto sobre el que los invoque ( selfen la convención estándar de Python, thisen la mayoría de los otros idiomas) se convierta en el sujeto.
Según esta regla, file.closees un poco incorrecto, a menos que vaya con el modelo mental de que el archivo se cierra solo, o que el fileobjeto no representa el archivo en sí, sino más bien un identificador de archivo o algún tipo de objeto proxy.
Sin embargo, un saco de boxeo nunca se perfora solo, por lo que punchingBag.punch()está mal de cualquier manera. be_punched()es técnicamente correcto, pero feo. receive_punch()podría funcionar, o handle_punch(). Otro enfoque, bastante popular en JavaScript, es tratar tales llamadas a métodos como eventos, y la convención debe ir con el nombre del evento, con el prefijo 'on', para que sea on_punched()o on_hit(). Alternativamente, podría adoptar la convención de que los participios pasados indican voz pasiva, y según esa convención, el nombre del método sería justo punched().
Otro aspecto a considerar es si el saco de boxeo sabe realmente qué lo golpeó: ¿hace alguna diferencia si lo golpeas, lo golpeas con un palo o te topas con un camión? Si es así, ¿cuál es la diferencia? ¿Puedes reducir la diferencia a una discusión, o necesitas diferentes métodos para diferentes tipos de castigo recibido? Un método único con un parámetro genérico es probablemente la solución más elegante, porque mantiene el grado de acoplamiento bajo, y dicho método no debería llamarse punched()o handle_punch(), sino más bien algo más genérico receive_hit(). Con tal método en su lugar, puede implementar todo tipo de actores que pueden golpear sacos de arena, sin cambiar el saco de arena en sí.