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