Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2010 14:33:34

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли обращатся к функции модуля как к свойству объекта

Допустим есть модуль:

#  module1.py

def prop1():
return 'AAA'
Можно ли организовать такой финт? :

#  module2.py

import module1

print module1.prop1 # должна печатать 'AAA'



Офлайн

#2 Июнь 10, 2010 16:32:44

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Можно ли обращатся к функции модуля как к свойству объекта

А попробовать самому и не забыть “()” написать?



Офлайн

#3 Июнь 10, 2010 18:39:20

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Можно ли обращатся к функции модуля как к свойству объекта

Daevaorn: я так понял товарищу нужно что-то типа @property.



Отредактировано (Июнь 10, 2010 18:41:03)

Офлайн

#4 Июнь 10, 2010 19:31:03

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли обращатся к функции модуля как к свойству объекта

truporez
Daevaorn: я так понял товарищу нужно что-то типа @property.
Да! Что-то типа @property, только на уровне модуля. Но, судя по-всему - не получится.



Офлайн

#5 Июнь 11, 2010 11:50:15

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Можно ли обращатся к функции модуля как к свойству объекта

Ну почему же? Можно.

prop1 = 'AAA'
:-)

А если серьёзно, то нужно в sys.modules подменить этот модуль объектом, в котором и будут property.
Одним словом – копать импорт.



Офлайн

#6 Июнь 11, 2010 12:12:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Можно ли обращатся к функции модуля как к свойству объекта

Скажу больше: можно даже унаследоваться от types.ModuleType - и за это ничего не будет; а свойства и прочие дескрипторы - заработают.
Только оно - нужно?



Офлайн

#7 Июнь 11, 2010 12:15:28

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Можно ли обращатся к функции модуля как к свойству объекта

Андрей Светлов
Только оно - нужно?
Just for fun! :-)



Офлайн

#8 Июнь 11, 2010 15:08:31

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли обращатся к функции модуля как к свойству объекта

Андрей Светлов
Только оно - нужно?
Вообще то уже нет… Просто загорелся где то дым “сделать красивый ленивый синглетон”…

ZZZ
Just for fun! :-)
ага :)



Офлайн

#9 Июнь 11, 2010 18:29:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Можно ли обращатся к функции модуля как к свойству объекта

Кажется, оно и так достаточно красиво.
Дело в том, что модуль - это _реализация_ класса ModuleType. property (как и любой другой дескриптор) требует _наследования_ - чтобы в классе были атрибуты с методами __get__. Это - другая модель, и Питон не поддерживает ее явно “из коробки”. По целому ряду причин - и это не поменяется еще как минимум лет десять. Да и не нужно менять, наверное.
Но, поскольку все - объект, наследоваться от модуля технически можно и есть способ создавать расширения импорта - то можно сделать import hook, который бы решал данную задачу.

Если интерес еще не пропал - могу рассказать, как. Но для начала вы должны четко представлять, как работает дескриптор…

Академически, возможно, это интересная задачка - но пока не вижу настоящих применений.
Много кода, не вполне очевидные мне “темные углы” и, главное - неясная семантика.
Модуль - синглетон. Функции модуля можно рассматривать как статические методы - а не как методы класса. Как быть с classmethod и staticmethod в этом случае? Что будет означать global - вопрос вопросов? Вопросов больше чем ответов. Ведь концепт _класса_ - это гораздо больше чем просто возможность писать @property… Кажется, лучше оставить все как есть.



Офлайн

#10 Июнь 12, 2010 08:45:50

gkraser
От:
Зарегистрирован: 2007-08-25
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Можно ли обращатся к функции модуля как к свойству объекта

Вообщем я понял, как это можно сделать. Ну и главное - я понял что это делать не нужно :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version