Форум сайта python.su
названия атрибутов должны быть типа str
Какая версия питона?
Офлайн
ZubchickPython 2.6
названия атрибутов должны быть типа str
Какая версия питона?
Офлайн
pikhovkinА зачем отслеживать? Если str() к простой строке применить, то ничего за это не будет.ZubchickPython 2.6
названия атрибутов должны быть типа str
Какая версия питона?
Насчет типа атрибутов: т.к. первый кусок кода работает, то да, ключи должны быть типа str. Но тогда как в вышеприведенном коде отследить unicode и преобразовать его в str?
Офлайн
certanistaКод в студию!
А зачем отслеживать? Если str() к простой строке применить, то ничего за это не будет.
class dict2obj(dict):
def __init__(self, dict_):
super(dict2obj, self).__init__(dict_)
for key in self:
item = self[key]
if isinstance(item, list):
for idx, it in enumerate(item):
if isinstance(it, dict):
item[idx] = dict2obj(it)
elif isinstance(item, dict):
self[key] = dict2obj(item)
def __getattr__(self, key):
return self[key]
d = {'a': 1, 'b': {'c': 2}, 'd': ["hi", {'foo': "bar"}]}
x = dict2obj(d)
assert x.a == x['a'] == 1
assert x.b.c == x['b']['c'] == 2
assert x.d[1].foo == x['d'][1]['foo'] == "bar"
Офлайн
Я имел в виду заменить
setattr(obj, name, value)
setattr(obj, str(name), value)
Офлайн
certanistaПрежде, чем писать такое, стоило бы проверить свои догадки.
В предыдущем примере на
Код:
setattr(obj, str(name), value)
Должно заработать.
Офлайн
Обновите питон: http://bugs.python.org/issue2646
Офлайн
Неужели доступ к объектам класса, происходит так же медленно как и к значениям в словаре???
Я то наивный полагал, что если ты объявил переменную (объект) в классе, то доступ к ней осуществляется, по фиксированному смещению в сегменте данных (кто ассемблер помнит). Я всё никак не могу привыкнуть что это интерпретатор :(
Офлайн
pikhovkinПроверил, работает. Более того, у меня и без str() работает.certanistaПрежде, чем писать такое, стоило бы проверить свои догадки.
В предыдущем примере на
Код:
setattr(obj, str(name), value)
Должно заработать.
Офлайн
certanista
Обновите питон: http://bugs.python.org/issue2646
certanistaС ума сойти! Обновился с 2.6.4 на 2.6.6 - заработало.
Проверил, работает. Более того, у меня и без str() работает.
Чуть повыше инетерпретатор обновить посоветовали.
Офлайн