Вы можете отложить объяснение, пока не представите своего ученика 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__
. Остальные унаследованы от объекта).
В качестве альтернативы скажите ему, что это метод, и еще не упомянуть, что метод является атрибутом. Атрибут: данные, привязанные к объекту. Метод: функция, привязанная к объекту (обычно с целью управления прикрепленными данными каким-либо образом).
Такие методы, как 'append', являются * поведением *, ваши волосы могут« расти », например. – jonrsharpe
Не используйте термин «свойство», а затем описывайте, что лучше описывается как «метод». Найдите новую аналогию «реальной жизни» для метода, вместо того, чтобы пытаться использовать ту же, что и для свойств. – Symmitchry