Например, если создать метод __len__() или __repr__() для вашего класса, он будет автоматически вызываться при передаче объекта этого класса функциям len() или repr() соответственно. Такие методы описаны в официальной документации Python на https://docs.python.org/3/reference/datamodel.html.
Атрибут класса представляет собой переменную, которая принадлежит классу, а не объекту. Атрибуты класса создаются внутри класса, но вне любых методов, подобно тому как глобальные переменные создаются в файле .py, но за пределами любых функций.
Методы классов используются не так часто. Самый распространенный сценарий использования — определение альтернативных конструкторов, кроме __init__(). Например, что если функция-конструктор может получать либо строку с данными, необходимыми новому объекту, либо строку с именем файла, который содержит данные для нового объекта? Список параметров метода __init__() не должен быть длинным и запутанным. Вместо этого можно воспользоваться методом класса, возвращающим новый объект.
Если вы захотите больше узнать обо всем этом, я рекомендую доклад «Schemas for the Real World» Карины Зона (Carina C. Zona) на конференции PyCon 2015 (https://youtu.be/PYYfVqtcWQY/)
Если вы не знаете, для чего нужны те или иные файлы, не огорчайтесь. Хотя полное описание назначения каждого файла выходит за рамки книги, на странице https://github.com/asweigart/cookiecutter-basicpythonproject присутствуют ссылки и нужная информация. Итак, базовые файлы созданы, и мы переходим к отслеживанию изменений в них в системе Git.
Как правило, корневая папка проекта содержит папку src для файлов с исходным кодом .py, папку tests для модульных тестов и папку docs для документации (например, сгенерированной системой документирования Sphinx). Другие файлы содержат информацию о проекте и конфигурации системы: README.md для общей информации, .coveragerc для конфигурации покрытия кода, LICENSE.txt для текста программной лицензии проекта и т.д.