Python: как сделать так, чтобы атрибут объекта ссылался на метод - PullRequest
17 голосов
/ 02 июля 2010

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

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

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

Это нормальный способ сделать это?

Ответы [ 4 ]

35 голосов
/ 02 июля 2010

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

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

p = Test()
p.x # returns 4

Гадость с __dict__ грязная, особенно когда @property доступен.

11 голосов
/ 02 июля 2010

Взгляните на встроенную функцию свойства .

5 голосов
/ 02 июля 2010

Используйте 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
3 голосов
/ 02 июля 2010

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

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

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

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

Какие звонки other_method каждый раз object.x доступ

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...