Как я могу узнать, какие члены определяет модуль / пакет?Под определением я имею в виду:
somemodule.py
import os # <-- Not defined in this module
from os.path import sep # <-- Not defined in this module
I_AM_ATTRIBUTE = None # <-- Is defined in this module
class SomeClass(object): # <-- Is defined also...
pass
Поэтому мне нужна какая-то функция, которая при вызове выдаст только I_AM_ATTRIBUTE
и SomeClass
.
Теперь я пытался использовать dir(somemodule)
, но как я могу узнать, какие из них определены в somemodule
?Проверка на __module__
не работает, поскольку она не определена в модулях и атрибутах (таких как os
package или sep
attribute).
Видимо, дикий импорт (from somemodule import *
) также не можетотфильтровать их, так что это вообще возможно?
Лучшее, что я могу получить:
import somemodule
for name in dir(somemodule):
try:
value = getattr(somemodule, name)
except:
pass
else:
if hasattr(value, "__module__"):
if value.__module__ != somemodule.__name__:
continue
if hasattr(value, "__name__"):
if not value.__name__.startswith(__name__):
continue
print "somemodule defines:", name
Берет os
, но оставляет sep
.