Найти - Пользователи
Полная версия: Доступ к методам объекта класса из класса
Начало » Python для новичков » Доступ к методам объекта класса из класса
1
dnox
Всем доброго дня. Есть такая задача:
Есть класс с методом foo. Метод получает один параметр и на его основе вызывает другой метод. Например, если параметр - 1, вызвать bar(), если 2 - baz() и т. д.
В теории, создается очень много объектов этого класса, поэтому вставлять маппинг {1: bar, 2: baz} в __init__ довольно накладно. Я хочу сделать этот словарь аттрибутом класса, но не знаю как. Либо же есть другой, более грамотный вариант?
FishHook
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
FishHook
Это ерунда какая-то.
Ну, задача скорее теоретическая, чем практическая. Понятно, что для того чтобы забить память придется создать ОЧЕНЬ много объектов. Вопрос можно было бы переформулировать так: как правильно хранить константу класса, которая одинакова для всех объектов класса.

А за ответ спасибо.
Shaman
dnox
как правильно хранить константу класса, которая одинакова для всех объектов класса
Как её правильно хранить показал FishHook, но для описанного выше случая ничего создавать не нужно - всё есть готовое.
dnox
Shaman
но для описанного выше случая ничего создавать не нужно - всё есть готовое.
Можешь пояснить? Через __getattribute__?
Shaman
dnox
Через __getattribute__?
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.
dnox
Shaman
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.
Ну, __dict__ я отбросил по другим причинам. Если делать через __dict__, придется каждый раз перед вызовом функции проверять ее наличие в __dict__, в моем же варианте проверка пройдет один раз при запуске.
Shaman
На самом деле проверка будет производиться каждый раз, явная, или неявная.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB