Python: obtener solo las clases definidas en el módulo importado con dir ()?

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