Согласно Python 2.7.12 документации, User-defined methods:Терминология: Пользовательский атрибут объекта функции?
определяемого пользователем объекты метода может быть создан при получении атрибута класса (возможно, через экземпляр этого класса), если этот атрибут является пользовательский объект функции, несвязанный пользовательский метод объект или объект метода класса. Когда атрибут представляет собой объект метода , новый объект метода создается, только если класс , из которого он извлекается, является таким же, как или производным классом класса, хранящегося в исходном объекте метода; в противном случае оригинальный объект метода используется как есть.
Я знаю, что все в Python является объектом, поэтому «определенный пользователем метод» должен быть идентичен «определяемого пользователем метода объекта». Однако я не могу понять, почему существует «определяемый пользователем атрибут объекта функции». Скажем, в следующем коде:
class Foo(object):
def meth(self):
pass
meth
есть функция, определенная внутри тела класса, и, таким образом, в method. Итак, почему мы можем иметь «определяемый пользователем атрибут объекта функции»? Не все атрибуты определены внутри тела класса?
Bouns вопрос: Обеспечить некоторые примеры, иллюстрирующие, как определенный пользователем объект, метод создается с помощьюполучая атрибута класса. Разве объекты не определены в своем определении класса? (Я знаю, что методы могут быть назначены экземпляру класса, но это исправление обезьяны.)
Я прошу помощи, потому что эта часть документа действительно очень запутанна для меня, программист, который знает только C, поскольку Python такой магический язык, который поддерживает как функциональное программирование, так и объектно-ориентированный программист, которого я еще не освоил. Я много раз искал, но все еще не могу понять.
В цитате также сказано: «Когда атрибут представляет собой определяемый пользователем объект метода ...» Но как атрибуция класса может быть объектом _user-defined object_ вместо _быстрого объекта функции_? –
Дополнительный вопрос: Не могли бы вы привести пример, иллюстрирующий разницу между ** классом, из которого он извлекается **, и ** классом, хранящимся в исходном объекте метода **? –
@sunqingyao: 'class Foo (object): def method (self): pass',' class Bar (object): method = Foo.method'. Теперь класс 'Bar' имеет объект unbound method в своем dict, и этот метод несвязанных методов записывает, что он пришел из класса' Foo'. – user2357112