Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 5, 2013 12:23:40

dnox
Зарегистрирован: 2012-12-17
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

Всем доброго дня. Есть такая задача:
Есть класс с методом foo. Метод получает один параметр и на его основе вызывает другой метод. Например, если параметр - 1, вызвать bar(), если 2 - baz() и т. д.
В теории, создается очень много объектов этого класса, поэтому вставлять маппинг {1: bar, 2: baz} в __init__ довольно накладно. Я хочу сделать этот словарь аттрибутом класса, но не знаю как. Либо же есть другой, более грамотный вариант?

Офлайн

#2 Июнь 5, 2013 13:00:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

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)



Офлайн

#3 Июнь 5, 2013 13:12:54

dnox
Зарегистрирован: 2012-12-17
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

FishHook
Это ерунда какая-то.
Ну, задача скорее теоретическая, чем практическая. Понятно, что для того чтобы забить память придется создать ОЧЕНЬ много объектов. Вопрос можно было бы переформулировать так: как правильно хранить константу класса, которая одинакова для всех объектов класса.

А за ответ спасибо.

Офлайн

#4 Июнь 5, 2013 15:35:04

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

dnox
как правильно хранить константу класса, которая одинакова для всех объектов класса
Как её правильно хранить показал FishHook, но для описанного выше случая ничего создавать не нужно - всё есть готовое.

Офлайн

#5 Июнь 6, 2013 10:45:05

dnox
Зарегистрирован: 2012-12-17
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

Shaman
но для описанного выше случая ничего создавать не нужно - всё есть готовое.
Можешь пояснить? Через __getattribute__?

Офлайн

#6 Июнь 6, 2013 11:07:02

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

dnox
Через __getattribute__?
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.

Офлайн

#7 Июнь 6, 2013 11:19:40

dnox
Зарегистрирован: 2012-12-17
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

Shaman
Это частности, главное что есть __dict__ . Посмотрите внутренности inspect.
Ну, __dict__ я отбросил по другим причинам. Если делать через __dict__, придется каждый раз перед вызовом функции проверять ее наличие в __dict__, в моем же варианте проверка пройдет один раз при запуске.

Офлайн

#8 Июнь 6, 2013 11:32:23

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Доступ к методам объекта класса из класса

На самом деле проверка будет производиться каждый раз, явная, или неявная.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version