В соответствии с CodeClimate два метода в упрощенном классе ниже являются дубликатами друг друга с массой около 40. Каким образом можно реорганизовать удалять дублирование? Эквивалентное понимание словаря имеет очень незначительно меньшую массу, но в остальном идентично.Удаление дубликата кода Python
class DataAdaptor:
def __init__(self):
self._feeds = {'field1': 'temperature', 'field2': 'humidity'}
def parse_data(self, data):
content = {}
for field, feed in self._feeds.items():
if feed in data:
content[field] = data[feed]
return content
def parse_content(self, content):
data = {}
for field, feed in self._feeds.items():
if field in content:
data[feed] = content[field]
return data
Разъяснение: версия с словарными постижениями имеет почти точно такую же дублирование массы, но я думаю, что это немного менее ясно.
class DataAdaptor:
def __init__(self):
self._feeds = {'field1': 'temperature', 'field2': 'humidity'}
def parse_data(self, data):
return {field: data[feed] for field, feed in self._feeds.items() if feed in data}
def parse_content(self, content):
return {feed: content[field] for field, feed in self._feeds.items() if field in content}
Это зеленое поле развития, поэтому мы свободны делать что-нибудь.
Я думаю, что у вас есть идея: сходство кода состоит в том, что две подпрограммы имеют очень схожую функцию и структуру, а не из-за патологической избыточности. Вы можете добавить некоторые служебные данные (например, обратный словарь) или логику (проверяя направление движения внутри одной общей петли). Любой из них изменяет ясность и удобство обслуживания вашего кода. – Prune