Как понять, к какому элементу мы обращаемся?
коротки ответ, как отличить атрибут от метода, проверить его функцией callable (если вызываемый - True, то есть метод , иначе атрибут) пример ниже:
>>> class Duck:
...     def __init__(self, color):
...         self.color = color
...     def get_color(self):
...         return self.color
...
>>>
>>>
>>> d = Duck('orange')
>>> d
<__main__.Duck object at 0x000001F569CDEA08>
>>> dir(d)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'color', 'get_color']
>>> callable(d.color)
False
>>> callable(d.get_color)
True
но скорее всего IDE и так подсвечивает 


вторая часть проще, нужно прочитать про public, protected, private например тут
и как в примере выше с помощью dir() можно увидеть все атрибуты и методы.
self - это ссылка на экземпляр класса. 
self.color это атрибут экземпляра класса. 
self.saveColor(self, color) - это метод класса, привязанный к каждому экземпляру класса. 

Экземпляры вашего класса Уток обладают свойством - цветом. 
Если представить себе класс как таблицу уток, то в этой таблице экземпляры - это строки, и есть колонка «color», это и есть атрибут, у каждой строки своё значение (у каждой утки свой цвет). 

Методы класса (self.saveColor(self, color), например) - это его встроенные инструменты, которые позволяют поменять какой-либо атрибут экземпляра или что-то сделать с экземпляром. Вроде как кнопки и регуляторы на пультике управления экземпляром.
Метод - это как функция, только крепко привязанная к экземпляру. У метода могут быть аргументы - self, который должен быть в каждом методе, и  color, который не обязан быть в других методах, а только в тех, где это действительно нужно (фактически, только в этом). 

self привязывает метод к экземпляру, а color позволяет передать в метод значение снаружи, чтобы внутри метода это значение связать с атрибутом (в данном случае атрибутом self.color) экземпляра.