Python: как сделать атрибут объекта ссылкой на вызов методом
Я бы хотел, чтобы для вызова атрибута типа object.x
возвращались результаты некоторого метода, например object.other.other_method()
. Как я могу это сделать?
Изменить: я спросил немного скоро: похоже, я могу сделать это с помощью
object.__dict__['x']=object.other.other_method()
Является ли это подходящим способом?
Ответы
Ответ 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
в качестве имени переменной, не так ли?