Когда я пробую этот код, я получаю AttributeError в Python. Я потратил почти 1 час, чтобы понять, но я не могу. У меня есть код для вычисления площади прямоугольника, площади треугольника и радиуса круга, затем я создал 3 функции в классе Shape для прямоугольника, треугольника и круга. Когда я запускаю этот код, я получаю AttributeError, и его объект «Проект» не имеет атрибута «прямоугольник» для любой формы, которую я выбираю.
class Project:
def __init__(self):
print("1. Area if rectangle")
print("2. Area of a triangle")
print("3. Radius of a circle")
print("4. Quit!")
while True:
try:
selection = int(input("Enter your choice "))
if selection == 1:
self.rectangle()
elif selection == 2:
self.triangle()
elif selection == 3:
self.circle()
elif selection == 4:
break
else:
print("Invalid value. Select 1-4")
except ValueError:
print("Invalid value. Select 1-4. (NO ALPHABETIC LETTERS)")
class shape:
def rectangle(self):
base = int(input("Enter the base:"))
height = int(input("Enter the height"))
area = height * base
print(f"The area of a rectangle is {area}")
def triangle(self):
base = int(input("Enter the base: "))
height = int(input("Enter the height: "))
area = base * height / 2
print(f"The are of the triangle is {area}")
def circle(self):
radius = int(input("Enter the Radius: "))
area = 3.142 * radius * radius
print(f"The area of the circle is {area}")
Project()
Ни один из классов не служит никакой цели. Ни один из них не является экземпляром. Ни один не «знает» о другом. В Python та же общая цель может и должна быть достигнута с помощью функций. Я предполагаю, что вы пришли к Python с другого языка, такого как Java.
Ну, класс Project
является экземпляром, но не класс shape
. Мы думаем, что ОП означал создание экземпляра shape
локально внутри __init__()
из Project
.
Потому что прямоугольник относится к классу Shape, а не к классу Project. Вам нужно создать экземпляр формы shape = Shape()
, а затем вызвать rectangle
на ней: shape.rectangle()
прямоугольник — это метод класса shape; он не является частью класса проекта.
Это должно выглядеть примерно так.
if selection == 1:
s = shape()
s.rectangle()
Почему вы ожидаете, что объект
Project
должен иметь любой изrectangle
,triangle
илиcircle
?