Класс Python использовать общее состояние для функции? - PullRequest
0 голосов
/ 11 марта 2019

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

Какова лучшая практика при использовании функции, которая может получить доступ к переменным, которые инициализированы в классе? Должен ли я просто получить доступ к переменной в функции? Или явно передать переменную, чтобы было ясно, что я на нее полагаюсь?

Я создал два примера, чтобы показать, что я имею в виду под этим вопросом. Какой метод предпочтительнее?

# method 1
class UploadForm(object):
    def __init__(self, form_data):
        self.file_name = form_data.get('file_name')

    def validate(self):
        agency_name = self.extract_agency_name(self.file_name)

    @staticmethod
    def extract_agency_name(file_name):
        pattern = re.search('^[CFS]Y\d{4} (.+?)[.](?:xls|csv)$', file_name, re.I)
        if pattern:
            agency_name = pattern.group(1)
            return agency_name


# method 2
class UploadForm(object):
    def __init__(self, form_data):
        self.file_name = form_data.get('file_name')

    def validate(self):
        agency_name = self.extract_agency_name()

    def extract_agency_name(self):
        pattern = re.search('^[CFS]Y\d{4} (.+?)[.](?:xls|csv)$', self.file_name, re.I)
        if pattern:
            agency_name = pattern.group(1)
            return agency_name

1 Ответ

0 голосов
/ 11 марта 2019

По причинам, указанным ниже, предпочтителен метод 2.

  1. Переменная члена должна быть доступна через self .
    • Используя self, вы даете понять, что ссылаетесь на переменную file_name того же объекта.
  2. Декораторы могут стать накладными расходами.
    • Декораторы - это обертки вокруг метода или переменной.
  3. Передача большего количества аргументов требует больше памяти.
    • Каждый аргумент занимает память.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...