Методы Python: возврат данных против хранения данных в атрибутах

Это может быть общий вопрос программирования, а не специфический для Python, но какова лучшая практика, когда речь идет о проверочных классах?

Мой первый подход заключается в том, чтобы метод возвращал словарь:

class Validator():
    def scene(self):
        # Do validations here
        return {'result': True, 'data' my_data, 'external_references': my_references}
    def character(self):
        # Do validations here
        return {'result': True, 'data' my_data, 'external_references': my_references}
# Usage
v = Validator()
scene_results = v.scene()
character_results = v.character()
if scene_results['result']:
    print "Scene Validation Succesful!"
    print "Data:", scene_results['data'], ", Files:", scene_results['external_references']
if character_results['result']:
    print "Character Validation Succesful!"
    print "Data:", character_results['data'], ", Files:", character_results['external_references']

Мой второй подход заключается в заполнении атрибутов класса:

class Validator():
    def __init__(self):
        self.scene_result = None
        self.scene_data = None
        self.scene_external_references = None
        self.character_result = None
        self.character_data = None
        self.character_external_references = None
    def scene(self):
        ## Do validations here
        self.scene_result = True
        self.scene_data = my_data
        self.scene_external_references = my_references
        # Won't return the values
    def character(self):
        # Do validations here
        self.scene_result = True
        self.scene_data = my_data
        self.scene_external_references = my_references
        # Won't return the values
# Usage
v = Validator()
v.scene()
v.character()
if v.scene_result:
    print "Scene Validation Succesful!"
    print "Data:", v.scene_data, ", Files:", v.scene_external_references
if v.character_result:
    print "Character Validation Succesful!"
    print "Data:", v.character_data, ", Files:", v.character_external_references

Или я должен использовать оба подхода, чтобы получить лучшее из обоих миров?

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

1 ответ

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

используйте классы, где это возможно.

Я также рекомендую написать отдельные методы тестирования для "проверок", о которых вы говорите, по тем же причинам, что и предыдущие.

Другие вопросы по тегам