Возможно ли ссылаться на внутренний класс в атрибуте другого внутреннего класса в Python?

#python #database #peewee

#python #База данных #чибис

Вопрос:

Я использую peewee в качестве ORM для небольшого проекта. Я хочу определить свои модели как внутренние классы следующим образом:

 db = SqliteDatabase("mydatabase.db")

class Outer:
    class Human(Model):
        id = AutoField()
        name = TextField()

        class Meta:
            database = db

    class Pet(Model):
        id = AutoField()
        owner = ForeignKeyField(Human)

        class Meta:
           database = db
 

Это выдает ошибку NameError: name 'Human' is not defined .

Я также пробовал: owner = ForeignKeyField(self.Human) и
owner = ForeignKeyField(Outer.Human) что предсказуемо приводит к name 'self' и name 'Outer' не определено.

Можно ли это сделать?

Комментарии:

1. Human не находится в глобальной области видимости, поэтому его нельзя найти, если вы не добавите к нему префикс self.

2. Почему вы хотите использовать внутренние классы? Если это для группировки, вместо этого используйте модуль с именем outer

3. Я надеялся инкапсулировать db переменную и все модели, которые на нее полагаются. Хотя теперь я вижу, что есть лучшие способы достижения этого (например, использование предложенной модели) Мне все еще интересно узнать, сработает ли этот подход.

4. Используйте базовую модель-класс и подкласс.