Как вы можете импортировать два файла Python в один без ошибки атрибута? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь настроить калькулятор математического уравнения.Он рассчитывает площадь / периметр 2D-фигур, объем / площадь поверхности 3D-фигур и так далее.Я пытаюсь сделать это, создав новый файл Python для каждого раздела, чтобы у меня не было одного большого файла.

Проблема в том, что всякий раз, когда я пытаюсь импортировать другие файлы (всев той же папке) в один файл главного меню, если я пытаюсь вызвать функцию из одного из файлов, я получаю ошибку атрибута, говорящую о том, что импортированный мной «модуль» не имеет функции, которую я только что импортировал.

AttributeError: модуль 'TwoDShapeMenu' не имеет атрибута 'twodshapes'

Я попытался создать функцию, которая импортирует файл только при вызове, однако я все еще получаю ту же ошибку, я не знаю, чтоеще сделать ...

Я импортировал два файла, которые я создал до сих пор в верхней части основного файла программы, все еще та же ошибка.

Я пытался кодировать его таким образомчто два файла импортируются только тогда, когда опция выбрана в операторе IF.

Я понятия не имею, что делать.

Основной файл

def main():
    print(
        "Please choose something from the list below: \n 1.Area/Perimeter of 2D Shapes \n 2.Volume/Surface area of 3D Shapes \n ")
    answer = input()

    if answer == "1":
        import TwoDShapeMenu
        TwoDShapeMenu.twodshapes()

    if answer == "2":
        import ThreeDShapeMenu
        ThreeDShapeMenu.threedshapes()

    else:
        while answer != "1" or "2":
            print("Please choose one of the options")
            main()

TwoDShapeMenu.пи

import math
import MainProgram

previousfunction = ""

def twodshapes():
        answer = input("Enter the number of the shape area you want to calculate: \n 1.Triangle \n 2.Trapezium \n 3.Square \n 4.Rectangle \n 5.Parallelogram \n 6.Rhombus/Kite/Diamond \n 7.Circle \n 8.Oval \n")
        answer = answer.upper()
#It then follows through all the options, then I created another function that returns me to the main menu of the main file.

def postdecision(previousfunction):
    print("Input 1 if you would like to calculate the area/perimeter of this shape again")
    print("Input 2 if you would like to return to the 2D shape menu")
    print("Input 3 if you would like to return to the main menu")
    print("Input 4 if you would like to exit the program")
    answer = input()

    #Option 3 looks like this

    if answer == "3":
        MainProgram.main()

я ваОжидает, что файлы будут импортированы без каких-либо проблем, но это не так, вместо этого он выдает ошибку атрибута:

AttributeError: модуль 'TwoDShapeMenu' не имеет атрибута 'twodshapes'

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Я решил проблему.В каждом файле меню, который я создаю, я определяю функцию, которая импортирует главное меню в файл только при необходимости (а когда он импортируется, он временно сохраняется в кэше ЦП до тех пор, пока код не будет остановлен, поэтому каждый раз, когда функциявся операция называется гораздо быстрее, из того, что я прочитал), а затем в главном файле, где я создал меню для всех файлов, я просто импортирую другие проекты вверху без каких-либо проблем.

Мойпроблема заключалась в том, что я импортировал файл главного меню в другие файлы в верхней части проекта, и это вызвало циклический импорт, что никогда не было хорошо в python.

0 голосов
/ 18 июня 2019

Я просто скопировал / вставил ваш код, и он работал без проблем ...

C:\Users\User>F:\asdfasdf\MainProgram.py
Please choose something from the list below:
 1.Area/Perimeter of 2D Shapes
 2.Volume/Surface area of 3D Shapes

1
Enter the number of the shape area you want to calculate:
 1.Triangle
 2.Trapezium
 3.Square
 4.Rectangle
 5.Parallelogram
 6.Rhombus/Kite/Diamond
 7.Circle
 8.Oval

Может быть, еще раз проверить структуру папок или какие-либо опечатки?

...