Dado una clase Foo
(ya sea una clase new-style o no), ¿cómo genera todas las clases base - en cualquier lugar de la jerarquía de herencia - es issubclass
de?¿Listar todas las clases base en una jerarquía de clase dada?
Respuesta
inspect.getmro(cls)
obras para los nuevos y viejos clases de estilo y devuelve el mismo que NewClass.mro()
: una lista de la clase y todas sus clases antecesoras, en el orden utilizado para la resolución del método.
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
Bien hecho: –
http://docs.python.org/library/inspect.html#inspect.getmro No funciona para las clases PyObjC :( archivo "/Users/rbp/Projects/zzzzzzz/macmdtypes.py", línea 70, en coaccionar inspect.getmro de impresión (path) de archivos "/System/Library/Frameworks/Python.framework/ Versions/2.7/lib/python2.7/inspect.py ", línea 348, en getmro _bases de búsqueda (cls, resultado) Archivo" /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 /inspect.py ", línea 339, en _bases de búsqueda para base en cls .__ bases__: AttributeError: el objeto '__NSTaggedDate' no tiene ningún atributo '__bases__' – rbp
@rbp Me susurro Parece que tuviste el mismo problema que encontré: intentabas hacer 'inspeccionar.getmro (obj)' en lugar de 'inspeccionar.getmro (tipo (obj))'. – esmit
puede utilizar el __bases__
tupla de la clase de objeto:
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
La tupla devuelta por __bases__
tiene todas sus clases base.
Espero que ayude!
inspect.getclasstree()
creará una lista anidada de clases y sus bases. Uso:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
Ooh, agradable. ¡Y para un resultado aún mejor, utiliza pprint! 'python -c 'inspeccionar importación; de pprint import pprint como pp; pp (inspeccionar.getclasstree (inspeccionar.getmro (IOError))) '' – penguin359
Véase el __bases__
property disponible en una pitón class
, que contiene una tupla de las clases bases:
>>> def classlookup(cls):
... c = list(cls.__bases__)
... for base in c:
... c.extend(classlookup(base))
... return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
Esto puede presentar duplicados. Y esta es la razón por la cual la documentación para 'getmro' explícitamente dice" ¿Ninguna clase aparece más de una vez en esta tupla "? –
Atención, '__bases__' solo sube ** un nivel **. (A medida que su utilidad recursivo implica, pero un rápido vistazo al ejemplo podría no recoger en eso.) –
Aunque la respuesta de Jochen es muy útil y correcta, como se puede obtener la jerarquía de clases utilizando el.Método getmro() del módulo de inspeccionar, también es importante destacar que la jerarquía de herencia de Python es la siguiente:
ejemplo:
class MyClass(YourClass):
Una heredera de clase
- de Child-Pugh
- clase derivada
- Subclase
ex:
class YourClass(Object):
hereditario clase
- clase Parent
- clase Base
- Superclass
Una clase puede heredar de otra - La clase atribuido se heredan - en particular, sus métodos se heredan - esto significa que las instancias de una clase que hereda (niño) pueden acceder atribuido de la clase heredada (padre)
ejemplo -> clase -> clases heredadas entonces
usando
import inspect
inspect.getmro(MyClass)
le mostrará la jerarquía, dentro de Python.
- 1. Listar todas las tablas en una base de datos
- 2. ¿Cómo se obtienen todas las propiedades de una clase y sus clases base (en la jerarquía) con Reflection? (C#)
- 3. Groovy Listar todas las propiedades para la clase
- 4. Listar todas las subclases con nombres completos
- 5. AppleScript - Listar todas las fuentes
- 6. TypeID para las clases derivadas de una clase base común
- 7. Listar todas las tablas en postgresql information_schema
- 8. ¿Listar todas las funciones integradas en javascript?
- 9. Listar todas las carpetas en el directorio
- 10. Obtener todas las clases heredadas de una clase abstracta
- 11. ¿Debo implementar IDisposable en todas las clases, o es una clase base suficiente?
- 12. Scala jerarquía de clases caso
- 13. jerarquía de clases C++ Matrix
- 14. ¿Cómo puedo obtener todas las clases heredadas de una clase base?
- 15. ¿Debo declarar todas las funciones virtuales en una clase base?
- 16. ¿Cómo puedo listar todas las tablas en una base de datos con Squirrel SQL?
- 17. ¿Listar todas las propiedades del objeto ventana?
- 18. Listar todas las pruebas encontradas por Nosetest
- 19. Android listar todas las imágenes disponibles
- 20. ¿Debo sellar todas las clases que sé que nunca deberían usarse como una clase base?
- 21. ¿Hay una función estándar para iterar sobre las clases base?
- 22. Consulta para listar todas las particiones en Datomic
- 23. En tiempo de ejecución, se encuentran todas las clases en una aplicación Java que se extienden una clase base
- 24. cómo obtener todas las subclases de una clase en php
- 25. Cómo llamar a métodos anulado en todas las clases derivadas
- 26. Listar todas las imágenes de la cámara en Android
- 27. Actualizaciones polimórficas en una jerarquía de clase inmutable
- 28. Uso de la reflexión para obtener todas las clases de cierto tipo base en dll
- 29. ¿Tiene mal olor el tener clases vacías en el medio de una jerarquía de clases?
- 30. ¿podemos listar todas las tablas en la base de datos msaccess usando sql?
Dado un objeto de clase ('type' sería el mejor término)' isinstance' no funcionará ... o te refieres a 'issubclass' o quieres tomar una instancia ;-p –
Gracias; Edité la publicación. –