У меня довольно большой проект на питоне, поэтому я разбиваю свои пользовательские классы на их собственные файлы .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()