Мне нужно создать объект, который действует как dict
, но я не могу использовать dict
для наследования. Я хочу передать объект в массив в pandas, и метод set_value
завершается ошибкой, если класс наследуется от dict
с ошибкой измерения. Это означает, что мой class
должен действовать как словарь, но не наследоваться от dict
. Большинство примеров показывают, как это сделать, наследуя от `dict.
То, что я не знаю, как решить:
- Если есть свойство с именем JSON, объект пытается получить значение.
Есть ли способ решить эту проблему?
###########################################################################
class BaseGeometry(object):
_dict = None
_ao = None
#----------------------------------------------------------------------
def __init__(self, iterable, **kwargs):
if iterable is None:
iterable = {}
for k,v in kwargs.items():
iterable[k] = v
self._dict = iterable
#----------------------------------------------------------------------
def __str__(self):
return str(self._dict)
#----------------------------------------------------------------------
__repr__ = __str__
#----------------------------------------------------------------------
def __getattr__(self, name):
if name == '_dict':
return self._dict
elif name in {'_ao','_type', '_HASARCPY', '_HASSHAPELY',
'_ipython_canary_method_should_not_exist_'}:
return self.__dict__[name]
elif name in self._dict:
return self._dict[name]
else:
raise AttributeError("No such attribute: " + name)
#----------------------------------------------------------------------
def __setattr__(self, name, value):
if name == '_dict':
self.__dict__['_dict'] = value
elif name in {'_ao','_type', '_HASARCPY', '_HASSHAPELY',
'_ipython_canary_method_should_not_exist_'}:
self.__dict__[name] = value
else:
self._dict[name] = value
#----------------------------------------------------------------------
__getitem__ = __getattr__
#----------------------------------------------------------------------
__setitem__ = __setattr__
#----------------------------------------------------------------------
def __delattr__(self, name):
if name in self._dict:
del self._dict[name]
else:
raise AttributeError("No such attribute: " + name)
#----------------------------------------------------------------------
def __iter__(self):
for k,v in self._dict.items():
yield k,v
ОБНОВЛЕНИЕ: СООБЩЕНИЕ ОБ ОШИБКЕ
builtins.ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Это вызвано тем, что панды проверяют if
. Если это объект, а не dict
, он работает.
Я также получаю эту ошибку:
builtins.ValueError: cannot set using a list-like indexer with a different length than the value