señor elrond
-
Qué es
__qualname__
en python y cómo es útil? -
¿Por qué tendría que usarlo más
__name__
?
yo leo el documentospero no me ayudaron a obtener una comprensión clara de su utilidad.
He leído Obtener el nombre completo de una clase de Python (Python 3.3+).
esa pregunta se hace “cómo obtener un nombre calificado”que supone que uno conoce el significado de “nombre calificado”. Obviamente, la respuesta a esa pregunta es usar el __qualname__
atributo.
mi pregunta es qué __qualname__
es y por qué ¿debería usarlo otra vez? __name__
.
__qualname__
da información más completa que __name__
y por lo tanto puede ser más útil en la depuración, por ejemplo.
Ejemplo:
>>> def f(): pass
... class A:
... def f(self): pass
... class A:
... def f(self): pass
...
>>> # __name__ is not showing the path, so these functions look equal
>>> f.__name__
'f'
>>> A.f.__name__
'f'
>>> A.A.f.__name__
'f'
>>> # And these classes looks equal
>>> A.__name__
'A'
>>> A.A.__name__
'A'
>>>
>>> # __qualname__ shows the path, so these functions are distinguishable
>>> f.__qualname__
'f'
>>> A.f.__qualname__
'A.f'
>>> A.A.f.__qualname__
'A.A.f'
>>> # And these classes are distinguishable
>>> A.__qualname__
'A'
>>> A.A.__qualname__
'A.A'
__qualname__
también está agregando algo de compatibilidad con versiones anteriores de Python 2 .im_class
.
-
Esto no solo ayuda con la depuración, sino que también es tremendamente útil cuando se realizan parches mono para evitar falsos positivos al verificar si la función original es la esperada.
– blubberdiblub
22 de septiembre de 2021 a las 6:43
Solo para (potencialmente) agregar a la respuesta anterior, __qualname__
también se puede llamar desde dentro de una clase, sin tener que estar vinculado a ningún método. Esto permite obtener el nombre de una clase desde dentro de la clase cuando no tiene un __init__
método definido:
class myClass:
print(__qualname__)
Esto devolverá:
myClass
Un escenario práctico en el que encontré esto útil es cuando se trabaja con logging
. Si desea implementarlo en un módulo con una clase que, como se dijo antes, no tiene un __init__
método, es decir, consiste solo en métodos de clase, luego para agregar el nombre de la clase a la ruta de notación de puntos que logging
requiere unir los registros generados por diferentes módulos en uno solo, __qualname__
parece una solución fácil.
-
Además de iniciar sesión, también es útil si está escribiendo un archivo personalizado.
__repr__
o__str__
– casi_ansiedad
29 de diciembre de 2022 a las 23:15
@Selcuk ¿Cómo es eso un duplicado? estoy preguntando que
__qualname__
es y cómo se usa, no ¿Cómo obtengo el nombre completo?…– Señor Elrond
26 de septiembre de 2019 a las 1:49
La pregunta que vinculó no tiene explicación sobre lo que hace o para qué se usa.
– Señor Elrond
26 de septiembre de 2019 a las 1:50
You are looking for __qualname__ (introduced in Python 3.3):
– Señor Elrond
26 de septiembre de 2019 a las 1:53
No lo considero una explicación de lo que
__qualname__
es.– Señor Elrond
26 de septiembre de 2019 a las 1:53
Es posible que desee explicar por qué los documentos no lo ayudaron a comprender qué es un nombre calificado. Encuentro la explicación bastante sencilla. Ayudarnos a comprender su falta de comprensión nos ayuda a proporcionar una explicación adecuada que, con suerte, lo ayudará a comprender.
–Max Vollmer
26 de septiembre de 2019 a las 4:48