Tengo un módulo escrito en Python. Ahora quiero importarlo en otro script y enumerar todas las clases que he definido en este módulo. Así que bash:
>>> import my_module >>> dir(my_module) ['BooleanField', 'CharField', 'DateTimeField', 'DecimalField', 'MyClass', 'MySecondClass', 'ForeignKeyField', 'HStoreField', 'IntegerField', 'JSONField', 'TextField', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'datetime', 'db', 'division', 'os', 'struct', 'uuid']
Las únicas dos clases que definí en my_module son MyClass
y MySecondClass
, las otras cosas son todas las cosas que my_module
en my_module
.
Ahora quiero de alguna manera poder obtener una lista de todas las clases que están definidas en my_module
sin obtener todas las otras cosas. ¿Hay una manera de hacer esto en Python?
Utilice el módulo de inspección para inspeccionar objetos vivos:
>>> import inspect >>> import my_module >>> [m[0] for m in inspect.getmembers(my_module, inspect.isclass) if m[1].__module__ == 'my_module']
Eso debería funcionar, conseguir que se my_module
todas las class
dentro de ese my_module
.
Puedes usar el navegador de clases Python
import pyclbr module_name = 'your_module' module_info = pyclbr.readmodule(module_name) print(module_info) for item in module_info.values(): print(item.name)
your_module
todas las clases definidas en your_module
Si realmente quieres usar dir (), aquí está:
>>> import module >>> [eval("module." + objname) for objname in dir(module) if type(eval("module." + objname)) is type]
o (forma de script)
import module classes = [] for objname in dir(module): obj = eval("module." + objname) if type(obj) is type: classes.append(obj) print(classes)
Pero esto utiliza la función “eval”, y realmente no es seguro para su uso. Me apegaría a la respuesta elegida