2015-09-08 2 views
1

Может ли кто-нибудь объяснить простыми словами, что такое атрибут на языке Python?Как объяснить атрибут в Python новичку

Например, что я могу сказать о

list.append(x) 

, который добавляет объект в конец списка, используя интуитивный, простой повседневный пример жизни? Я обнаружил, что атрибуты описывают свойство объекта, а свойство моих волос, например, состоит в том, что они коричневые и короткие.

Очень хорошо, но если да, то какое свойство list описывает атрибут append? Это может добавить что-то в конце list? Я бы сказал, что это операция на list, а не на ее свойство.

Не могли бы вы прояснить это для меня, пожалуйста?

+0

Такие методы, как 'append', являются * поведением *, ваши волосы могут« расти », например. – jonrsharpe

+0

Не используйте термин «свойство», а затем описывайте, что лучше описывается как «метод». Найдите новую аналогию «реальной жизни» для метода, вместо того, чтобы пытаться использовать ту же, что и для свойств. – Symmitchry

ответ

0

Смотрите python documentation: Особенно 9.3.3. Объекты экземпляра. Существует два типа допустимых имен атрибутов, атрибутов данных и методов. Вы найдете там примеры. Итак, почему методы также называются атрибутами? Для некоторых методов термин «атрибут» подходит лучше, чем для других. Пример:

car.color() 

Этот метод может вернуть цвет автомобиля.

Возьмите его просто как определение и обобщение того, что слово после точки называется атрибутом объекта перед точкой.

0

Свойства - это одна вещь, которая может быть смоделирована с использованием атрибутов. Как вы говорите, операция добавления в конец списка - это еще одна вещь. В Python это довольно простая интерпретация; поскольку функции являются первоклассными значениями, они могут быть сохранены как значение атрибута, как любой другой тип. Здесь list.append - это просто функция, которая при вызове добавляет свой аргумент в конец list. Вы можете видеть, что это не имеет значения, по какому имя вы вызываете функцию. Следующие идентичны в поведении:

  1. list.append(5)
  2. f = list.append; f(5)

В обоих случаях такая же оценка метод вызывается с аргументом 5.

0

Вы можете отложить объяснение, пока не представите своего ученика class, и идея о том, что функция может быть назначена переменной так же, как число или структура данных. На этом этапе очевидно, что метод является атрибутом таким же образом, что хранимое значение является атрибутом. Сравнить количество и удар в

class Counter(object): 
    def __init__(self, initial=0): 
     self.count=initial 
    def bump(self): 
     self.count += 1 
     print("count = {0}".format(self.count)) 

count - целочисленный атрибут. bump - атрибут «связанный метод» (обычно называемый только методом). list.append - еще один такой атрибут.

>>> d=Counter() 
>>> d.bump() 
count = 1 
>>> d.bump 
<bound method counter.bump of <__main__.counter object at 0x7fb5eb01db38>> 
>>> d.count 
1 
>>> dir(d) 
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 
'bump', 'count'] 

(в частности, последние два, и ваш __init__. Остальные унаследованы от объекта).

В качестве альтернативы скажите ему, что это метод, и еще не упомянуть, что метод является атрибутом. Атрибут: данные, привязанные к объекту. Метод: функция, привязанная к объекту (обычно с целью управления прикрепленными данными каким-либо образом).