繁体   English   中英

如何在 Python 中动态找出子类的 package 名称?

[英]How can I dynamically find out a subclass' package name in Python?

对于上下文,我正在编写一个使用 Django 的 ORM 的库。 I don't want users of my library to have to define the app_label every time they subclass my custom Model superclass, instead I want to enforce a standard structure for projects created with it that makes sure the package name of every class that subclasses my Model超类将等于app_label 这是我目前拥有的代码:

class Model(django.db.models.Model):
    class Meta:
        abstract = True

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        # package_name = ???
        cls._meta.app_label = package_name

??? 部分是我似乎无法弄清楚的。 有任何想法吗?

在 SO 上的一个稍微不同的问题上找到了我的问题的答案 这就是我实现它的方式:

class Model(django.db.models.Model):
    class Meta:
        abstract = True

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        mod = inspect.getmodule(cls)
        base, _sep, _stem = mod.__name__.partition('.')
        cls._meta.app_label = base

或者,这也应该有效:

class Model(django.db.models.Model):
    class Meta:
        abstract = True

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        mod = inspect.getmodule(cls)
        cls._meta.app_label = mod.__package__.split('.')[-1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM