FAQ: Learn Python - Introduction to Classes - Class It Up

This community-built FAQ covers the “Class It Up” exercise in Codecademy’s lessons on Python.

FAQs for the Codecademy Python exercise Class It Up:

Join the Discussion. We Want to Hear From You!

Have a new question or can answer someone else’s? Reply (reply) to an existing thread!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources about Python in general? Go here!

Want to take the conversation in a totally different direction? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account, billing, Pro, or Pro Intensive? Reach out to our support team!

None of the above? Find out where to ask other questions here!

Other FAQs

The following are links to additional questions that our community has asked about this exercise:

  • This list will contain other frequently asked questions that aren’t quite as popular as the ones above.
  • Currently there have not been enough questions asked and answered about this exercise to populate this FAQ section.
  • This FAQ is built and maintained by you, the Codecademy community – help yourself and other learners like you by contributing!

Not seeing your question? It may still have been asked before – try searching for it by clicking the spyglass icon (search) in the top-right of this page. Still can’t find it? Ask it below by hitting the reply button below this post (reply).

Why does the method check_angles only take the argument self (i.e. def check_angles(self): ) as opposed to the three angles (i.e. def check_angles(self, angle1, angle2, angle3):). Is it because the angles must be provided to exist in the triangle class?

Additionally, why is it not possible to use:

if angle1 + angle2 + angle 3 == 180

as opposed to:

if (self.angle1 + self.angle2 + self.angle3) == 180:

since we previously defined self.angle = angle in the init() ?

1 Like

Because self is the context of the angles for that instance. We don’t need to pass them in, only access the instance variables.

Those variables do not exist in the context of the instance. When we first create the instance the variables are available, but if we return to the method at some time later, they will not. Only their self.attributes still exist.

For this exercise, I have created the Triangle class and the check_angles class method. I have also created the number_of_sides member variable, which according to this, is in the correct place. Here is my code:

class Triangle(object):
  number_of_sides = 3

  def __init__(self, angle1, angle2, angle3):
    self.angle1 = angle1
    self.angle2 = angle2
    self.angle3 = angle3
    
    def check_angles(self):
      if (self.angle1 + self.angle2 + self.angle3 == 180):
        return True
      else:
        return False

When I select ‘Run’, no error appears, but the ‘Next’ button is not enabled. After multiple attempts at ‘Run’, I am asked whether I want to view the solution.

Because no error is displayed in either the console or in tooltip form, how can I improve my code, if it is indeed wrong?

The check_angles method looks to be indented enough to be in the code block of the __init__() method.

Yes, I believe you’re correct. But shouldn’t that produce an indentationError in the console? This is very difficult to spot and especially if you don’t go full-screen in the editor.

Not if the interpreter simply sees it as code in the other method. While it is still indented, create an instance and then try to run the method.

OK, thanks. Ultimately, I would have expected the error to get passed to something further down the exception stack so that at least something is displayed in the console. Perhaps because there is no actual error in the end, and the program simply runs then stops, it is one of those few exceptional circumstances where the codecademy tooltip may have to intervene to guide the user. In this situation, even viewing the solution and comparing it visually, it may not be immediately clear to the user.

That will be for the CC curriculum team. We have no hand in the lessons, only the questions that are asked in the forums.

Tell me, what happened when you ran the method on your instance?

Belay. I’ve run the check…

Traceback (most recent call last):
  File "C:/Users/Mr/AppData/Local/Programs/Python/Python38/Scripts/triangle_class.py", line 16, in <module>
    print (equilateral.check_angles())
AttributeError: 'Triangle' object has no attribute 'check_angles'

The interpreter could not find the method.

Perhaps the error should then appear in the console as it does in your IDE?

It would if you tried to run the method on a Triangle instance.

Leave the code indented as before and try this line…

print (Triangle(30, 60, 90).check_angles())
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    Triangle(30, 60, 90).check_angles()
AttributeError: 'Triangle' object has no attribute 'check_angles'

Good day everyone,
Could someone have a look at the screenshot of the code? I do not understand the error that pops up. In the console I have an output True, if you change the values, it gives False, but neverthless it sees it as an error.

Thanks in advance for clarification!

I even checked the solution to figure out the Error and it does not look differently from mine. Strange.

Double-check your conditional statement in check_angles(). Remember that the angles of a triangle should add up to 180 degrees.

1 Like