имя файла класса модуля Python MySQL - PullRequest
2 голосов
/ 18 февраля 2009

Я запутался, как имя каталога, имя файла и имя класса все работают вместе.

Это то, что у меня есть на данный момент

  app.py
  database/
     client.py
     staff.py
     order.py

Внутри client.py У меня есть один класс с именем client, который действует как модель базы данных (MVC). То же самое с моими другими файлами: staff.py имеет класс staff, order.py имеет order.

Тогда в app.py Я делаю:

  from database import client as model
  c = model.client()

А потом я запутался. В идеальном мире это то, что я хочу сделать :

  1. Храните классы модели моей базы данных в отдельных файлах в своем собственном каталоге.

  2. Используйте их так:

  c = model.client()
  o = model.order()
  s = model.staff()

Единственный способ сделать это - поместить все мои классы в один файл с именем model.py и сохранить его в корне.

Я уверен, что мне здесь чего-то не хватает.

1 Ответ

4 голосов
/ 18 февраля 2009

Python имеет два основных способа импорта контента. Модули и пакеты.


Модуль - это просто файл python по пути включения: order.py

Если order.py определяет класс с именем foo , то доступ к этому классу может быть получен с помощью:

import order
o = order.foo()

Чтобы использовать синтаксис из оригинального вопроса, вам необходимо убедиться, что ваш файл model.py имеет следующие атрибуты: [client, staff, order]

Однако это обычно означает размещение их в одном файле. Которого вы пытаетесь избежать.


Пакет - это каталог с __ init __. Py внутри него. init .py инициализирует пакет (т. Е. Он запускается при первом импорте), и в этом каталоге вы можете иметь модули или подпакеты.

model
    __init__.py
    client.py
    staff.py
    order.py

Таким образом, чтобы получить доступ к любому из подмодулей, вы просто сказали бы:

import model.client

Однако это просто импорт модуля. Он не импортирует никаких атрибутов модуля. Таким образом, чтобы получить доступ к классу внутри модуля, вам нужно указать его:

import model.client
o = model.client.clientclass()   

Это немного утомительно, но очень хорошо организовано.


Лучшее из двух (где производительность не имеет большого значения):

Если вы введете следующий код в __ init __. Py :

from .client import clientclass as client
from .staff import staffclass as staff
from .order import orderclass as order

Затем вы автоматически загрузили все свои классы, и к ним можно получить доступ как:

import model
c = model.client()
s = model.staff()
o = model.order()

В конце концов, может быть проще придерживаться немагического способа сделать это:

import model.client
o = model.client.clientclass()   

- Gahooa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...