Найти - Пользователи
Полная версия: Создать новый класс по подобию старого
Начало » Python для новичков » Создать новый класс по подобию старого
1 2
dissdoc
Итак, нашел ошибку еще одну.
Если делаю вот так
new_cls = cls()
То создается объект. Все хорошо. А если я создаю объекты в цикле, то получается параметры следующего объекта перетирают параметры предыдущего. Отсюда, нужно еще чтобы объект и клонировался.
Попробовал несколько способов.
1. B = type('B',(cls.__class__,),copy.deepcopy(cls.__dict__))
Выдает ошибку
object.__new__(dictproxy) is not safe, use dictproxy.__new__()
2. __getstate__, __setstate__ Почему-то не сработали тоже. Т.е. они отработали аналогично new_cls = cls()
3. Добавил метод copy в свой класс. Чтобы было вот так myClass().copy()
def copy(self):
_deepcopy_dispatch[ModuleType] = lambda x, module: x
result = deepcopy(self)
del _deepcopy_dispatch[ModuleType]
return result
Тоже ошибка потому. что есть вложенный класс. Неужели нужно тогда переопределять все?
'Collection' object is not callable. If you meant to call the ‘__deepcopy__’ method on a ‘Collection’ object it is failing because no such method exists.
o7412369815963
> А если я создаю объекты в цикле, то получается параметры следующего объекта перетирают параметры предыдущего.
Перетирается ссылка на объект, а не сам объект. Храните их в массиве.

Опять же не понятно для чего это все.
dissdoc
Если интересно. То у меня есть класс. И я создаю запрос. Результат запроса необходимо перевести в класс. Вот и все)
Я и делаю вот так
new_cls = cls()
#.... заполняем данными, проверяем - все хорошо
mylist.append(new_cls)
И в результате в mylist все перетерлось на последний класс (точнее. все объекты перетерлись по последним данным)

Опять же если делаю вот так класс
new_cls = type(cls.__name__, (object,), dict(cls.__dict__))
То все отрабатывает, ничего не перетирается, но уже это не инициализированный класс :( Что тоже не подходит
dissdoc
Нашел ошибку. Код нужно оформить вот так, как мне и советовали. Я невнимательно следовал советам
new_cls = type(cls.__name__, (object,), deepcopy(dict(cls.__dict__)))
init_cls = new_cls()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB