Найти - Пользователи
Полная версия: Еще про стиль написания программ.
Начало » Python для экспертов » Еще про стиль написания программ.
1 2 3
ice
кто? класс?
я имел ввиду как в книге у Россума сделать

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:
.......
Ferroman
Проверь профайлером, узнаешь скорость.
Андрей Светлов
Переопределять __setattr__ без особой нужды - далеко не лучшая идея. Дескрипторы лучше. А если в классе две сотни аттрибутов - может, что-то не в порядке с дизайном-архитектурой?
astoon
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):
...
ice
А если в классе две сотни аттрибутов - может, что-то не в порядке с дизайном-архитектурой?
ну не 2 сотни. Но десяток-другой, я думаю, может набраться.
ice
astoon
from rwproperty import setproperty, getproperty
не могу такого для симбиана найти.
astoon
ice
astoon
from rwproperty import setproperty, getproperty
не могу такого для симбиана найти.
Возьми с PyPI и положи в симбиан. Там один файлик.
Leron
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'
PooH
Leron
немного погуглив нашёл такое решение:
+5! Глядя на такое всегда хочется сказать “Ну как я сам не допер!” ;)
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