Подтвердить что ты не робот

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

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

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

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

Является ли это подходящим способом?

4b9b3361

Ответ 1

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

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

p = Test()
p.x # returns 4

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

Ответ 2

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

Ответ 3

Используйте 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 'm.x is %s' % m.x
    # setting x
    m.x = 5
    # getting new x
    print 'm.x is %s' % m.x

Ответ 4

Это вызовет только other_method один раз при его создании.

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

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

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

Доступ к вызовам other_method каждый раз object.x

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