Хорошо / плохо передавать wx из класса в функцию? - PullRequest
1 голос
/ 31 октября 2019

Я совершенно новичок в ООП, так что это может быть очень глупый вопрос.

У меня есть много классов, все из которых используют общий диалог, который выполняет простой "get file", который находится в моем модуле утилит. Является ли плохой практикой передача wx этой функции, поэтому у меня не должно быть «import wx» вверху моего файла utils.py?

В данный момент я вызываю подпрограмму, нажимаяКнопка и передача пути по умолчанию, но это означает, что мне нужно иметь «import wx» в моем utils.py, а также мои test.py

test.py

import utils, wx

#... Lots of wx stuff happens here

f = utils.get_file(self, def_path)

#... Lots more wx stuff happens here

utils. py

import wx

def get_file(self,defaultPath):
    newFile = ''
    with wx.FileDialog(self, "Select sound file",
                       style=wx.FD_OPEN, defaultDir=defaultPath) as fileDialog:
        if fileDialog.ShowModal() == wx.ID_CANCEL:
            return newFile    # the user changed their mind

    # Proceed loading the file chosen by the user
    newDir = fileDialog.GetDirectory()
    if newDir == defaultPath:
        newFile = fileDialog.GetFilename()
    else:
        newFile = fileDialog.GetPath()
    return newFile

Итак, это плохая практика - изменять вызов на f = utils.get_file(self, wx, def_path) и функцию на def get_file(self, wx, defaultPath):, что позволяет мне удалить «import wx» из utils.py

1 Ответ

0 голосов
/ 31 октября 2019

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

file_one.py

import random

def get_a_number():
    return random.randint(0, 101)

file_two.py

from file_one import get_a_number

def multiply_random_number(random_number, multiple):
    print(random_number * multiple)

multiply_random_number(get_a_number(), 4)

Обратите внимание, что я не импортирую снова в случайном порядке в file_two. Я даю только функции, которую я вызываю, первый позиционный аргумент из file_one, то есть возвращаемое значение.

...