При вызове метода объекта первым параметром ВСЕГДА передаётся сам объект, для которого этот метод вызван. Потому, ЛЮБОЙ метод класса обязан содержать минимум один параметр. У тебя же методы вообще без параметров, что и вызывает ошибку.
Точечная нотация - не более, чем синтаксический сахар. Когда мы пишем: s.replace('b', 'Q').replace('c', 'R') в действительности происходит вызов метода класса str: str.replace(str.replace(s, 'b', 'Q'), 'c', 'R') И так происходит при вызове любых методов любых объектов.
То, что первый параметр метода называется self - не более, чем соглашение, упрощающее чтение кода. На самом деле он может иметь абсолютно любое название.