2014-01-18 2 views
1

Я размышляю над дизайном класса. В настоящее время у меня есть понимание списка над списком данных, который создает экземпляр класса для каждого члена списка, тем самым возвращая мне список экземпляров моего класса.Класс Python, возвращающий несколько экземпляров

Было бы лучше или даже возможно иметь вместо этого метод класса, который принимает список и возвращает список экземпляров?

По существу, я задаюсь вопросом, будет:

data = [lots of data] 
[MyClass(point) for point in data] 

или

@classmethod 
def from_list(cls, data_list): 
    return [cls(point) for point in data_list] 

быть лучше/вещий? Если это имеет значение, в используемом мной я всегда буду создавать экземпляр класса из списка данных.

+0

«Если это имеет значение, я использую это, я всегда буду создавать экземпляр класса из списка данных». - это кажется ** крайне ** вероятно, изменится, и тогда у вас будет неудобный метод класса, лежащий вокруг, который обрабатывает 75% случаев использования и на самом деле не делает ваш код чище. – user2357112

ответ

0

Я бы сказал, что первый метод будет лучше (понимание списка), так как вы всегда будете инициализировать данные из списка. Это делает вещи явными.

+0

Оба варианта имеют одинаковое поведение независимо от того, какой тип итерации предоставляется. Почему вы предпочитаете метод класса (например, 'from_list', кстати) для случаев, когда данные могут не поступать из списка? – user2357112

+0

Просто потому, что его более явным. –

+0

Кажется менее явным для меня. 'MyClass.from_list (set (whatever))' заставит меня потратить несколько минут, проверяя, была ли это ошибка. – user2357112

0

Как бы там ни было, между ними не так много выбора. Тем не менее, @classmethod имеет один главный плюс; он доступен для подклассов MyClass. Это намного больше Pythonic, чем отдельные функции для каждого типа объектов, которые вы могли бы создать в списке.

+0

Более pythonic, чем отдельные функции для каждого типа, но я бы сказал, что еще не Pythonic, чем использование списков. – user2357112

+0

Обе версии используют списки! – jonrsharpe

Смежные вопросы