• Как понять, к какому элементу мы обращаемся?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    self - это ссылка на экземпляр класса.
    self.color это атрибут экземпляра класса.
    self.saveColor(self, color) - это метод класса, привязанный к каждому экземпляру класса.

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

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

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

    @igor6130
    Ключевое слово self означает, что мы присваиваем значение не глобальной переменной класса, а принадлежащей конкретному объекту, созданному на его основе. В вашем случае - Utya (названия переменных в питоне не должны начинаться с заглавных букв).
    Ответ написан
    Комментировать
  • Как понять, к какому элементу мы обращаемся?

    shabelski89
    @shabelski89
    engineer
    коротки ответ, как отличить атрибут от метода, проверить его функцией 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 и так подсвечивает
    63ea8c10ab2b5903826805.png

    вторая часть проще, нужно прочитать про public, protected, private например тут
    и как в примере выше с помощью dir() можно увидеть все атрибуты и методы.
    Ответ написан
    2 комментария