dnox
Июнь 5, 2013 12:23:40
Всем доброго дня. Есть такая задача:
Есть класс с методом foo. Метод получает один параметр и на его основе вызывает другой метод. Например, если параметр - 1, вызвать bar(), если 2 - baz() и т. д.
В теории, создается очень много объектов этого класса, поэтому вставлять маппинг {1: bar, 2: baz} в __init__ довольно накладно. Я хочу сделать этот словарь аттрибутом класса, но не знаю как. Либо же есть другой, более грамотный вариант?
FishHook
Июнь 5, 2013 13:00:04
dnox
В теории, создается очень много объектов этого класса, поэтому вставлять маппинг {1: bar, 2: baz} в __init__ довольно накладно.
Это ерунда какая-то. Но если хочется извращений, то можно
class SuperClass(object):
def bar(self):
return 1
def baz(self):
return 2
DCT={1:bar,2:baz}
def foo(self, param):
return self.DCT[param](self)
s = SuperClass()
print s.foo(1)
print s.foo(2)
dnox
Июнь 5, 2013 13:12:54
FishHook
Это ерунда какая-то.
Ну, задача скорее теоретическая, чем практическая. Понятно, что для того чтобы забить память придется создать ОЧЕНЬ много объектов. Вопрос можно было бы переформулировать так: как правильно хранить константу класса, которая одинакова для всех объектов класса.
А за ответ спасибо.
Shaman
Июнь 5, 2013 15:35:04
dnox
как правильно хранить константу класса, которая одинакова для всех объектов класса
Как её правильно хранить показал
FishHook, но для описанного выше случая ничего создавать не нужно - всё есть готовое.
dnox
Июнь 6, 2013 10:45:05
Shaman
но для описанного выше случая ничего создавать не нужно - всё есть готовое.
Можешь пояснить? Через __getattribute__?
Shaman
Июнь 6, 2013 11:07:02
dnox
Через __getattribute__?
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.
dnox
Июнь 6, 2013 11:19:40
Shaman
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.
Ну, __dict__ я отбросил по другим причинам. Если делать через __dict__, придется каждый раз перед вызовом функции проверять ее наличие в __dict__, в моем же варианте проверка пройдет один раз при запуске.
Shaman
Июнь 6, 2013 11:32:23
На самом деле проверка будет производиться каждый раз, явная, или неявная.