Если я имею дело со словарями везде, я должен сделать их "классами"? - PullRequest
2 голосов
/ 17 июля 2011

Прямо сейчас у меня есть много файлов Python.У каждого есть много функций.

Я передаю хеш-карты везде.Основные словари со словом в качестве ключа и оценкой в ​​качестве значения.

{ 'dog': 33, 'cat': 294 }

Я также делаю несколько более сложных фраз, таких как:

{ 'dog': [ 33, 66, 11, 88 ], 'cat': [11, 66, 22] }

Нужнопревратить это в мои собственные "объекты"?если это так, что бы они были?Я не очень много делаю ООП, поэтому я задаю эти нубские вопросы.

Ответы [ 6 ]

4 голосов
/ 17 июля 2011

Поддерживая большую кодовую базу в течение многих лет, которая отдавала предпочтение необработанным диктатам над объектами, я считаю, что если эта кодовая база будет поддерживаться либо А) другим человеком, либо Б) несколькими людьми, вы должны начать переходить к реальным классам и ООП. Прежде всего, тот факт, что вы можете легко увидеть, какие атрибуты должен иметь экземпляр класса, просматривая исходный код или даже интерактивно используя dir() и другие методы самоанализа, делает ваш код намного проще для изучения, изменения и сопровождения. Понимание и отладка намного проще с классами, которые имеют интуитивно понятные имена, четко определенные свойства, документацию и читаемый исходный код, в отличие от огромного беспорядка функций, которые принимают в качестве аргументов диктанты и преобразовывают их во время выполнения множеством способов, которые могут быть понятым только читая всю кодовую базу. Трассировки также, как правило, легче читать и расшифровывать, когда используется classe, поскольку вы не получаете типовых сообщений об ошибках низкого уровня.

В качестве еще одного доказательства посмотрите на зрелые и успешные проекты на Python. Вы увидите много ООП, классов и документации. Необработанные подсказки, списки, наборы и кортежи хороши, когда это уместно (ваши данные действительно просты) и для небольших проектов и сценариев, но удобство сопровождения не длится дольше определенного размера проекта. Понятие «X - это просто диктат» выживает только тогда, когда ваша концепция X предельно проста.

3 голосов
/ 17 июля 2011

Мое эмпирическое правило заключается в том, что если у вас есть функции, которые действуют в словаре, то это, вероятно, должен быть класс, а эти функции должны быть методами.прохождение вышеуказанного стиля очень знакомо.Однако инструменты Python OO намного легче и их стоит развернуть раньше, чем позже.

Например

{ 'dog': 33, 'cat': 294 }

Становится что-то вроде

class AnimalCount(object):
    """Some useful documentation you didn't have a place for before"""
    def __init__(self, dog=0, cat=0):
        self.dog = dog
        self.cat = cat
    def add_cat(self):
        self.cat += 1
    def add_dog(self):
        self.dog += 1
    def dog_eats_cat(self):
        self.cat -= 1
3 голосов
/ 17 июля 2011

В зависимости от того, что именно вы делаете, namedTuple может быть лучшим решением для вашей проблемы.Недостаточно информации, чтобы сказать наверняка.

1 голос
/ 17 июля 2011

ООП (или любая другая философия дизайна) - это стратегия, упрощающая ваш код, а не религия, которой вы придерживаетесь, потому что у нее много хитов в Google.

Целью ООП является выделение повторяющихся шаблонов в вашем коде: если вы часто пишете один и тот же код для обработки этих диктовок, вы должны выделить эти шаблоны и написать функции. Иногда у вас будет много этих функций, действующих на одну и ту же структуру данных, а затем вы группируете их вместе в классе.

Итак, вы должны использовать класс? Только если вы думаете, что это может упростить ваш код.

0 голосов
/ 17 июля 2011

Использование словаря является объектно-ориентированным, поскольку словарь - это класс, а ваш экземпляр - объект. Причина расширения его собственным классом должна заключаться не просто в том, что вы хотите программировать ОО, а в том, что к классу словаря необходимо добавить дополнительные методы или атрибуты.

Мы не можем ответить на этот вопрос без более подробной информации.

Вы также можете вкладывать словари, поэтому ключ - это строка, а значение - другой словарь. Это, по крайней мере, позволит вам передавать словарь-обертку вместо целой связки отдельных словарей.

0 голосов
/ 17 июля 2011

dicts хороши для многих целей. когда вы обнаружите, что вам нужно добавить некоторые атрибуты, просто создайте подкласс dict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...