коротки ответ, как отличить атрибут от метода, проверить его функцией 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() можно увидеть все атрибуты и методы.