|
Alvin Seville
|
|
Количество классов в одном файле .py14.07.2018, 17:40. Показов 7869. Ответов 15
Метки нет (Все метки)
Правильно ли размещать в каждом файле по одному классу (как здесь)? Спрашиваю так как не уверен правильно ли делать так (хотя в C# так нормально).
0
|
|
| 14.07.2018, 17:40 | |
|
Ответы с готовыми решениями:
15
несколько классов в одном файле (ООП) Подсчитать количество классов в файле Ошибка "Тип "MyPoint" создан из нескольких разделенных классов в одном и том же файле." при открытии дизайнера |
|
|
||
| 14.07.2018, 17:51 | ||
|
Никто не делит код просто на классы. Код распределяют по модулям. А модуль это коробка с гомогенным\похожим\взаимосвязным содержимым. В C# делают точно также. Как и в любом ЯП. Распихивание каждого класса по отдельному файлу без декомпозиционной\архитектурной необходимости - бессмысленно. Если я напишу 100 классов - кому-то будет по приколу потом ковыряться в сотне файлов?
0
|
||
|
Alvin Seville
|
|
| 14.07.2018, 17:53 [ТС] | |
|
Garry Galler, если подробней, то у меня один класс = один файл в C#. Причём, классы объединяются соответствующие пространства имён. И каждому пространству имён соответствует одноименная папка. Например:
0
|
|
|
Alvin Seville
|
|
| 14.07.2018, 18:39 [ТС] | |
|
Как я понял, в Python так делать не стоит.
0
|
|
|
Alvin Seville
|
|
| 14.07.2018, 20:03 [ТС] | |
|
Welemir1, в Python же нет пространств имён, чтобы можно было логически группировать классы, а потом разом импортировать. И да, а если классы находятся в файлах, которые вложены в папку, вложенную в текущую папку, то как их импортировать?
0
|
|
|
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
|
||
| 14.07.2018, 20:36 | ||
Сообщение было отмечено Volobuev Ilya как решение
Решение
1
|
||
|
Alvin Seville
|
|
| 14.07.2018, 20:39 [ТС] | |
|
ТабуретY, точнее, я создаю в главной папке этот файл, в нем пишу после __all__ имена файлов дочерней папке? И тогда из любого файла, который в главной папке, можно будет писать import название дочерней папки?
0
|
|
|
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
|
|
| 14.07.2018, 20:50 | |
|
Только __all__ = ['first', 'second'] и обращаться from название_дочерней_папки.first import * и т.д.
1
|
|
|
Alvin Seville
|
|
| 14.07.2018, 20:51 [ТС] | |
|
ТабуретY, а что делать, если несколько дочерних папок?
0
|
|
|
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
|
|
| 14.07.2018, 20:55 | |
Сообщение было отмечено Volobuev Ilya как решение
Решение
В каждой свой __init__.py
1
|
|
|
|
|||||||||||
| 14.07.2018, 21:36 | |||||||||||
|
И В Java это тоже, как я понял, считается крайностью: The first three package principles are about package cohesion, they tell us what to put inside packages:
Добавлено через 10 минут Ну да, в этих правилах говорится о пакетах: пакет может состоять из нескольких файлов, но зачем размазывать именно каждый класс по файлу?! Неужели рекомендации по дизайну кода на Java советуют именно это? Добавлено через 8 минут И, в любом случае, в python подход "один класс - один файл" не имеет никакой обоснованной необходимости. Код разделяют на модули, содержащие блоки объединенные общей логикой (а блоки могут состоять из множества классов и просто функций), а набор этих модулей объединятся в пакет. К тому же система импорта в python довольно запутана и непроста для понимания, так что чем меньше ты делишь код на мелкие субмодули, чем меньше уровней вложенности у твоих пакетов - ты меньше боли получаешь :-)
0
|
|||||||||||
|
Автоматизируй это!
|
||||
| 15.07.2018, 10:23 | ||||
|
Но я не спорю, что в питоне так удобнее, тут многие вещи решаются проще, в том числе с импортами и отсутствием необходимости вообще создавать классы
0
|
||||
|
|
||||
| 15.07.2018, 12:14 | ||||
|
В Java это следствие дизайна языка, чтобы не было конфликта имен и т.д., двухуровневая инкапсуляция Пакет-> класс. В 9-ке, как я понял, добавили еще один уровень и теперь сами пакеты можно группировать в модули. Но старый классовый подход остался как есть. Кстати, в Scala и Kotlin от дизайна "один public класс - один файл" отказались. Ведь класс как может иметь самодостаточный функционал, так и нет, будучи тесно связанным с другим. И как раз проще (ИМХО) иметь эти два\три\четыре и т.д. класса, связанные одной логикой\функциональностью, в одном файле, чтобы ничего не искать по директории и не открывать код в десятке вкладок редактора. Класс же это просто единица переиспользования - нет никакого необходимости (кроме жесткого дизайна языка) пихать его в отдельный файл. К тому же группировка по классам не есть группировка по логике. В C# группировка кода с классами идет через пространство имен и создавать на каждый Хотя, если очень хочется, можно даже один класс размазать на несколько файлов :-) - это так называемый partial class. В Go, пакет как и в Java это директория с файлами, в которых объявлена директива package имя_пакета и все файлы с таким объявлением будут автоматически иметь общее пространство имен и могут импортироваться по имени общей директории. И здесь тоже группировка кода никак не привязана к публичным классам.... которых, кстати, в Go нет, а есть типы и легковесные структуры :-)
0
|
||||
|
Автоматизируй это!
|
|
| 15.07.2018, 12:19 | |
|
0
|
|
| 15.07.2018, 12:19 | |
|
Помогаю со студенческими работами здесь
16
Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле? Как передать значение переменной PHP в одном файле в переменную JS в другом файле? Дан текстовый файл. Определить количество слов в файле. Сформировать другой файл, записав в каждой его в строке по одном
Сравнение слов в одном файле со словами в другом файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|