Python: как сделать атрибут объекта ссылкой на вызов методом

Я бы хотел, чтобы вызов атрибута типа object.x возвращал результаты некоторого метода, например object.other.other_method() . Как я могу это сделать?

Редактирование: я спросил немного скоро: похоже, я могу сделать это с помощью

 object.__dict__['x']=object.other.other_method() 

Это хороший способ сделать это?

4 Solutions collect form web for “Python: как сделать атрибут объекта ссылкой на вызов методом”

Используйте декоратор свойств

 class Test(object): # make sure you inherit from object @property def x(self): return 4 p = Test() px # returns 4 

Сбрасывание с __dict__ является грязным, особенно когда доступно свойство @property.

Посмотрите на встроенную функцию свойств .

Использовать property

http://docs.python.org/library/functions.html#property

 class MyClass(object): def __init__(self, x): self._x = x def get_x(self): print "in get_x: do something here" return self._x def set_x(self, x): print "in set_x: do something" self._x = x x = property(get_x, set_x) if __name__ == '__main__': m = MyClass(10) # getting x print 'mx is %s' % mx # setting x mx = 5 # getting new x print 'mx is %s' % mx 

Это вызовет только один other_method когда он будет создан

 object.__dict__['x']=object.other.other_method() 

Вместо этого вы могли бы это сделать

 object.x = property(object.other.other_method) 

Какой other_method каждый раз, object.x обращается к object.x

Конечно, вы не используете object в качестве имени переменной, не так ли?

Interesting Posts

Hashable, неизменный

python unicode обрабатывает различия между print и sys.stdout.write

Emacs / Python: запуск оболочки python в режиме буферизации в буферном режиме и блочном буферизации

Проверьте, является ли файл символической ссылкой в ​​python

Разделители пути Python ZipFile

Какие преимущества или недостатки будут импортировать модуль, содержащий команды «импорт»?

Python: логический список двоичной строки

Как функции оператора на рабочем месте Python отличаются от стандартных функций оператора?

Введенный график Matplotlib в Tkinter падает на Python 3.5

Как использовать пространства имен xml с find / findall в lxml?

Официальный учебник Django Part1: RuntimeError: максимальная глубина рекурсии превышена в cmp

Что делает синтаксис расширенного среза для отрицательных шагов?

Каков самый быстрый способ сгладить произвольно вложенные списки в Python?

matplotlib imshow – стандартная нормализация цвета

отказ импортировать pymongo ubuntu

Python - лучший язык программирования в мире.