Я ищу наиболее эффективный способ сравнения содержимого двух экземпляров класса. У меня есть список, содержащий эти экземпляры класса, и перед добавлением в список я хочу определить, совпадают ли их значения свойств. Это может показаться тривиальным для большинства, но после изучения этих форумов я не смог определить, что я пытаюсь сделать. Также обратите внимание, что у меня нет фона программирования.Самый эффективный способ сравнения содержимого двух экземпляров класса в python
Это то, что я до сих пор:
class BaseObject(object):
def __init__(self, name=''):
self._name = name
def __repr__(self):
return '<{0}: \'{1}\'>'.format(self.__class__.__name__, self.name)
def _compare(self, other, *attributes):
count = 0
if isinstance(other, self.__class__):
if len(attributes):
for attrib in attributes:
if (attrib in self.__dict__.keys()) and (attrib in other.__dict__.keys()):
if self.__dict__[attrib] == other.__dict__[attrib]:
count += 1
return (count == len(attributes))
else:
for attrib in self.__dict__.keys():
if (attrib in self.__dict__.keys()) and (attrib in other.__dict__.keys()):
if self.__dict__[attrib] == other.__dict__[attrib]:
count += 1
return (count == len(self.__dict__.keys()))
def _copy(self):
return (copy.deepcopy(self))
Перед добавлением в мой список, я бы что-то вроде:
found = False
for instance in myList:
if instance._compare(newInstance):
found = True
Break
if not found: myList.append(newInstance)
Однако я являюсь неясным, является ли наиболее эффективным или python-ic способ сравнения содержимого экземпляров одного и того же класса.
Вы должны поместить их в набор и реализовать '__hash__' и' __eq__' в своем классе. – khachik