簡體   English   中英

如何在python文件中列出給定類型的所有類?

[英]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

另一種方法可能是使用內置函數globalsissubclassisinstance

在最新版本的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM