Python: отсутствует атрибут класса __ модуль __ при использовании type ()?

Я пытаюсь динамически построить некоторые классы, которые являются подклассами моделей джанго. Модель. Мой код выглядит так:

MyModel = type('MyModel', (models.Model,), {
    'field': models.BooleanField()
    })

Когда Джанго пытается загрузить это, это дает следующее исключение:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 88, in inner_run
    self.validate(display_num_errors=True)
  File "/usr/lib/python2.7/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/usr/lib/python2.7/site-packages/django/core/management/validation.py", line 36, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 146, in get_app_errors
    self._populate()
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 61, in _populate
    self.load_app(app_name, True)
  File "/usr/lib/python2.7/site-packages/django/db/models/loading.py", line 78, in load_app
    models = import_module('.models', app_name)
  File "/usr/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/home/user/project/app/models.py", line 221, in <module>
    'field': models.BooleanField()
  File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 38, in __new__
    module = attrs.pop('__module__')
KeyError: '__module__'

Кажется, что класс, построенный с помощью type () , не получает элемент __ module __ , который присутствует для класса, определенного с помощью class . Что здесь происходит?

-121--1244176- Где можно найти документацию по выравниванию памяти на C++ между различными платформами/компиляторами? Я ищу хороший (всеобъемлющий) документ о выравнивании памяти на C++, типичные подходы, различия между компиляторами и общие подводные камни. Просто проверить, насколько я понимаю тему...

Я ищу хороший (всеобъемлющий) документ о выравнивании памяти на C++, типичных подходах, различиях между компиляторами и общих подводных камнях. Просто проверить, правильно ли мое понимание темы, и узнать что-то новое.

Этот вопрос вдохновлен моим ответом на другой вопрос, где я использовал следующую конструкцию:

char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything

Он был раскритикован как не соответствующий правилам выравнивания памяти. Не могли бы вы объяснить в качестве бонуса, почему этот подход имеет недостатки с точки зрения выравнивания памяти? Пример, когда это не работает, будет высоко оценен. Я знаю, что это плохой подход в целом, но я часто использую его в реализации сетевых протоколов, поэтому это скорее практический вопрос, чем теоретический.

Также, пожалуйста, не упоминайте строгий псевдоним здесь, это для другого вопроса.

9
задан Andriy Tylychko 6 September 2011 в 14:02
поделиться