Как работает наследование __slots__? (Мой код работает, и я не знаю, почему)Python

Программы на Python
Anonymous
Как работает наследование __slots__? (Мой код работает, и я не знаю, почему)

Сообщение Anonymous »

Вот пример моей реализации:

Код: Выделить всё

class FileHandler:
__slots__ = ("_target_path",)

def __init__(self, target_path: Path) -> None:
self._target_path = target_path

class Downloader(FileHandler):
__slots__ = ("_url", "_downloaded_bytes")

def __init__(self, target_path: Path, url: str) -> None:
super().__init__(target_path)
self._url = url
self._downloaded_bytes = 0
... Есть еще кое-что, но здесь это не обязательно. Короче говоря, все методы работают в загрузчике, включая download(), и все они используют target_path, а также _url и _downlaoded_bytes. Вот что-то забавное, когда я печатаю следующее:
Тест и результаты в следующем поле...
foo.py

Код: Выделить всё

from pathlib import Path

from solutions.file.downloader import Downloader

url = "https://www.unicode.org/Public/UCD/latest/ReadMe.txt"
path = Path(__file__).parent / "unicode.txt"

def foo():
downloader = Downloader(path, url)

return downloader.__slots__

if __name__ == "__main__":
foo_val = foo()
print(foo_val) if not foo_val is None else None
--- КОНСОЛЬНЫЙ ВЫВОД НИЖЕ СТРОКИ ---

Код: Выделить всё

('_url', '_downloaded_bytes')
--- КОНЕЦ ВЫВОДА ---
Итак, похоже, это каким-то образом работает. Однако правильна ли моя реализация? Кроме того, он по-прежнему работает как законные слоты или он решает не использовать слоты и вместо этого использует больше памяти?
Я все еще новичок, поэтому извините за мое невежество. .
Все ответы приветствуются.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... t-know-why

Вернуться в «Python»