Хобрук: Ваш путь к мастерству в программировании

Как импортировать локальные классы в python

У меня довольно большой проект на питоне, поэтому я разбиваю свои пользовательские классы на их собственные файлы .py. Многие из этих классов используют другие пользовательские классы в качестве входного аргумента. Когда я импортирую пользовательский класс с помощью From custom_file Import CustomClass, (я думаю, функция IntelliSense) кода VS не может распознавать свойства и методы локально импортированных классов, как это происходит для глобального импорта (numpy, matplotlib и т. д.).

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

Пример структуры файла:

-Main.py (импорт болта из болта) — болт.py — это файл, содержащий класс болта, который требует (длина: двойная, резьба: резьба). Bolt импортирует поток из потока -thread.py — это файл, содержащий поток, который требует (диаметр: двойной, шаг: int, класс: int)

В моем Main.py у меня есть еще один класс, который использует Bolt в качестве входных данных, и в этом классе я хотел бы получить класс потока. Для этого я использую self.bolt.thread.class,, но IntelliSense рекомендует отметить после ввода self.bolt.

И, возможно, на более высоком уровне принято, чтобы классы передавались другим классам в качестве входных данных, а не выполняли что-то вроде наследования (я мало что знаю об этом). То, как я делаю что-то для приведенного выше примера: (пожалуйста, дайте мне знать, если это не правильный способ сделать что-то)

# File 1 --- thread.py
class Thread:
    def __init__(self, diameter: double, pitch: int, cls: int):
        self.diameter = diameter
        self.pitch = pitch
        self.cls = cls

# File 2 --- bolt.py
from thread import Thread

class Bolt:
    def __init__(self, length: double, thrd: Thread):
        self.length = length
        self.thrd = thrd

# File 3 --- joint.py
from bolt import Bolt

class Joint:
    def __init__(self, num_bolts: int, bolt: Bolt):
        self.num_bolts = num_bolts
        self.bolt = bolt

    def get_thrd_class(self):
        return self.bolt.thrd.cls

# File 4 --- main.py
from joint import Joint
from bolt import Bolt
from thread import Thread

thrd = Thread(.25, 20, 3)
bolt = Bolt(1.25, thrd)
joint = Joint(5, bolt)

cls = joint.get_thread_class()

  • Это выглядит довольно хорошо для меня. Находятся ли thread.py, bolt.py, joint.py и main.py в одном каталоге? 06.08.2019
  • Да, они все в одном каталоге 06.08.2019

Ответы:


1

хорошо, я исправил это. Оказывается, я использовал conda - как только я удалил это, в установленном vanilla python 3.7 все работало как надо.

06.08.2019
Новые материалы

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..