У меня есть список экземпляров блока контента, которые по мере обработки списка содержимого для каждого блока генерируются в экземпляре класса типа контента (если это имеет смысл).Python: пытается установить атрибуты экземпляра класса из экземпляра другого экземпляра класса
Поскольку я перебираю список, я пытаюсь установить атрибуты экземпляра модулей с выходом из экземпляра именованного модуля из extra_modules. Если есть лучший способ написать этот вопрос, не стесняйтесь редактировать.
Ниже приведен пример кода тестирования, который я пытаюсь запустить, используя фреймворк Python Bottle. Я пытаюсь получить тестовый результат, прежде чем я на самом деле поставлю код создания контента в класс photoGallery.
core.py:
import extra_modules
module_blocks_in_db = [
# module-ID, module-sys-name, module-sys-desc, module-function, module-variables
[1, 'photo_gallery_main', 'A little intro gallery', 'photoGallery', '{"images": ["photo1.jpg", "photo2.jpg", "photo3.jpg"]}'],
]
class moduleBlocks:
def __init__(self, mbidb):
for i in mbidb:
setattr(self, i[1], getattr(extra_modules, i[3])(i[4]))
@route('/')
def home():
page_id = 1
modules = moduleBlocks(module_blocks_in_db)
return modules.photo_gallery_main
extra_modules.py:
class photoGallery:
def __init__(self, *args):
self.output = 'Output from photoGallery class instance'
return self.output
Это ошибка, я получаю от сервера разработки бутылки:
File "core.py", line 46, in __init__
setattr(self, i[1], getattr(extra_modules, i[3])(i[4]))
TypeError: __init__() should return None
Я действительно не понимая эту ошибку, и чем больше я смотрю на код, тем больше я сбиваю с толку. Теперь я попытался несколько разных способов захватить вывод из экземпляра класса и назначить его как атрибут класса moduleBlocks в моем примере. Где я ошибаюсь?
EDIT: Теперь я изменил мою SetAttr линии на две отдельных линии и избавился от выхода возвратного в классе extra_modules ФОТОГалереи и вещи теперь работают отлично, спасибо:
x = getattr(extra_modules, i[3])(i[4])
setattr(self, i[1], x.output)
Что вы пытаетесь делать с этой линией? 'setattr (self, i [1], getattr (extra_modules, i [3]) (i [4]))' – mbatchkarov
Я использую getattr для создания экземпляра класса photoGallery, который в def __init__ генерирует контент и возвращает вывод. Затем я хочу установить соответствующий атрибут экземпляра moduleBlocks с этим выходом. –