Несколько классов в модуле Python
Я очень новичок в Python (я исхожу из фона JAVA), и мне интересно, сможет ли кто-нибудь помочь мне с некоторыми стандартами Python. Это обычная или "правильная" практика поместить несколько классов в модуль? Я работал с Django и начал с учебников, и они поместили свои классы модели базы данных в один и тот же модуль. Это что-то, что обычно делается или я должен придерживаться 1 класса на модуль? Есть ли причина, по которой я буду делать одну над другой?
Надеюсь, что я буду чист, а не универсален. Спасибо всем заранее!
Ответы
Ответ 1
Вот полезное эмпирическое правило из того, что я видел в типичных Java-проектах:
Самый нижний пакет в Java должен быть файлом в Python
Что это значит?
Если ваш проект Java был организован:
toplevel/
subproject/
Foo.java
Bar.java
subproject2/
Baz.java
Qux.java
Затем ваш проект Python должен выглядеть так:
toplevel/
subproject.py <-- put class Foo, Bar here
subproject2.py <-- put class Baz, Qux here
Все, что нужно знать: организация:
- Не используйте внутренние классы. Просто положите
классы в том же модуле
- По соглашению, вещи, начинающиеся с _, "private"
- Хорошо иметь "общедоступные переменные"
Ответ 2
Это абсолютно правильно. Функциональные возможности групп модулей. Если эта функциональность реализована в нескольких классах (например, Tree, Node, Leaf), тогда уместно разместить их вместе.
Модуль более тесно связан с пакетом Java, чем с классом Java. Вы также можете реализовать модуль как папку, названную для модуля, с файлом __init__.py
внутри (поэтому Python может идентифицировать модуль как таковой, __init__.py
также может включать в себя код инициализации и списки классов, функций и подпакеты для экспорта.)
Ответ 3
Если вы сомневаетесь, просто посмотрите на стандартные библиотеки Python:)
Например, стандартный календарный модуль содержит 31 класс. Так что да, это нормально.
Ответ 4
В Python, конечно, нормально. Когда и почему вы выбираете один над другим, отчасти это вопрос вкуса и отчасти конвенция.
Если вы все еще знаете Python и поэтому его соглашения, читайте руководство по стилю, стоит вашего времени.
Ответ 5
Подумайте об этом так.
В java то, что вы пишете, это класс, где в случае Python вы пишете модуль вместо класса. Таким образом, модуль может содержать несколько классов.
Всякий раз, когда вы хотите использовать определенный класс, сначала импортируйте соответствующий модуль, а затем вызовите класс для создания объектов.
Вот пример.
Classes.py(это модуль с именем "Классы" )
class MyClass(object):
def greet(self):
print("Hello World")
class MyNextClass(object):
def greetAgain(self):
print("Hello again")
Теперь я могу импортировать этот модуль из любого места, где пожелаю
import Classes
if __name__ == '__main__':
a=Classes.MyClass()
a.greet()
b=Classes.MyNextClass()
b.greetAgain()