[英]How do I list all classes of a given type in a python file?
我使用django,並且有一個冗長的models.py文件。
class Foo(models.Model):
name = models.CharField()
class Bar(models.Model):
name = models.CharField()
class Fab(models.Model):
name = models.CharField()
有沒有辦法列出文件中所有屬於(models.Model)實例的類?
Django提供了一些實用程序方法來獲取模型類。
from django.db.models.loading import get_models, get_app
app = get_app('myappname')
models = get_models(app)
當你說:
...文件中的類是...的實例
我認為您的意思是“ ...文件中屬於...子類的類”。 如果是這樣的話:
classes = [cls for cls in dir(module)
if issubbclass(getattr(module, cls), models.Model)]
inspect
模塊可能會為您提供幫助。 這是我編寫的插件管理器類中的一些代碼,可以作為示例。
def load_plugin_file(self, pathname):
'''Return plugin classes in a plugin file.'''
name, ext = os.path.splitext(os.path.basename(pathname))
f = file(pathname, 'r')
module = imp.load_module(name, f, pathname,
('.py', 'r', imp.PY_SOURCE))
f.close()
plugins = []
for dummy, member in inspect.getmembers(module, inspect.isclass):
if issubclass(member, Plugin):
p = member(*self.plugin_arguments,
**self.plugin_keyword_arguments)
if self.compatible_version(p.required_application_version):
plugins.append(p)
return plugins
另一種方法可能是使用內置函數globals
, issubclass
和isinstance
。
在最新版本的Django中, django.db.models.loading
顯然不再存在,但是您可以使用以下命令列出應用程序的模型:
from django.apps import apps
app = apps.get_app_config("your_app_name")
models = app.get_models()
for model in models:
print(model)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.