В настоящее время я работаю над проектом python-sqlite, и я новичок в обоих.
Я создал класс, у которого есть некоторые атрибуты, объявленные внутри метода __init__
.Мне нужен другой атрибут, который будет списком или массивом, который будет содержать некоторые из уже объявленных атрибутов класса.Я хочу, чтобы мой список содержал только ссылку на исходные атрибуты.
Мне нужна эта структура, чтобы иметь возможность вызывать эти атрибуты вместе, выполнять итерации по ним, но я хочу иметь возможность вызыватьих тоже отдельно.
Сначала я попытался создать этот атрибут списка внутри метода __init__
, после остальных объявлений.Однако, когда я создаю экземпляр и изменяю начальное значение одного из атрибутов, атрибут в списке не обновляется.
Затем я попытался создать этот же атрибут списка внутри другого метода класса,вместо того, чтобы внутри init и вызывать его из моего кода, и он сделал то, что хотел.
Почему другой подход дает разные результаты?
Здеськод в обоих случаях:
Дело № 1
class Tools():
def __init__(self):
self.name = "defaultname"
self.manufacturer = "defaultmanuf"
self.tooldetails = [self.name, self.manufacturer]
def get_details(self):
return self.tooldetails
Дело № 2
class Tools():
def __init__(self):
self.name = "defaultname"
self.manufacturer = "defaultmanuf"
def _set_detail_list(self):
self.tooldetails = [self.name, self.manufacturer]
def get_details(self):
_set_detail_list()
return self.tooldetails
Акогда я создаю экземпляр:
tool1 = Tools()
tool1.name = 'abc'
tool1.get_details()
Первый случай дает мне ["defaultname", "defaultmanuf"]
, а второй дает мне ["abc","defaultmanuf"]
.
Мой вопрос: почему Python выдает мне другой вывод?для каждого случая?Кажется, что я упускаю что-то важное о том, как работает инициализация ..
dir()
и другие подобные функции или магические методы могут дать мне то, что я хочу, но я думаю, что они недостаточно гибки, если выхочу много разных списков с разными наборами атрибутов.К сожалению, интроспекция не очень хорошо работает с командами в формате строки sqlite ..
Плюс мне любопытно, как работает python, что я считаю очень важным ..
Спасибо !!