Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 15, 2008 14:26:30

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

кто? класс?
я имел ввиду как в книге у Россума сделать

class VirtualAttributes:
__vdict = None

__vdict_name = locals().keys()[0]
def __init__(self):
self.__dict__[self.__vdict_name] = {}

def __getattr__(self, name):
return self.__vdict[name]

def __setattr__(self, name, value):
self.__vdict[name] = value
и вот тут уже проверять на валидность установки параметров.
как этот способ по скорости?
или имеется в виду, что классы так и работают?
не будет ли мобильнику кисло от такой вот конструкции:
if key == 'font_height':
.....
elif key == 'border_width':
......
elif ....
........
еще много много раз
........
else:
.......



Офлайн

#2 Окт. 15, 2008 15:33:18

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

Проверь профайлером, узнаешь скорость.

Офлайн

#3 Окт. 16, 2008 00:55:14

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

Еще про стиль написания программ.

Переопределять __setattr__ без особой нужды - далеко не лучшая идея. Дескрипторы лучше. А если в классе две сотни аттрибутов - может, что-то не в порядке с дизайном-архитектурой?



Офлайн

#4 Окт. 16, 2008 04:12:54

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

ice
а если вообще делать через __getattr__/__setattr__? то есть заводить словарь внутри класса и проверять куда обращаются? это долго будет по времени? особенно если обращений к классу много.

вот тут у нокии есть классы, если я пытаюсь что-то изменить, что менять нельзя, у меня возникает ексепшн “рид онли фиелд”, а те, которые можно менять оно меняет и сразу меняет поведение объекта (вызывается функция-коллбэк моя), как это сделано? кроме вышеозначенных setattr и getattr есть способы?

идия с динамик проперти не плохо, но когда полей не много.

хм … может правда завести словарь. тогда потом проще будет добавлять новые свойства.
Можно еще такой хук использовать, если речь идет о “удобстве”:
$ easy_install rwproperty

from rwproperty import setproperty, getproperty

class Foo(object):

@setproperty
def blah(self, value):
...

@getproperty
def blah(self):
...



Офлайн

#5 Окт. 16, 2008 07:41:18

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

А если в классе две сотни аттрибутов - может, что-то не в порядке с дизайном-архитектурой?
ну не 2 сотни. Но десяток-другой, я думаю, может набраться.



Отредактировано (Окт. 16, 2008 07:52:13)

Офлайн

#6 Окт. 16, 2008 07:53:44

ice
От:
Зарегистрирован: 2008-01-12
Сообщения: 156
Репутация: +  0  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

astoon
from rwproperty import setproperty, getproperty
не могу такого для симбиана найти.



Офлайн

#7 Окт. 17, 2008 00:35:19

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

ice
astoon
from rwproperty import setproperty, getproperty
не могу такого для симбиана найти.
Возьми с PyPI и положи в симбиан. Там один файлик.



Отредактировано (Окт. 17, 2008 00:35:37)

Офлайн

#8 Окт. 19, 2008 20:04:36

Leron
От:
Зарегистрирован: 2007-12-11
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

PooH
У property есть один неприятный момент при наследовании:
class A(object):
def _get_name(self):
return 'A'
name = property(_get_name)

class B(A):
def _get_name(self):
return 'B'

In [10]: b.name
Out[10]: 'A'
немного погуглив нашёл такое решение:
>>> class A(object):
def _get_name(self):
return 'A'
name = property(fget = lambda self:self._get_name())


>>> class B(A):
def _get_name(self):
return 'B'

>>> a = A()
>>> b = B()
>>> a.name
'A'
>>> b.name
'B'



Офлайн

#9 Окт. 20, 2008 06:05:15

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Еще про стиль написания программ.

Leron
немного погуглив нашёл такое решение:
+5! Глядя на такое всегда хочется сказать “Ну как я сам не допер!” ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version