Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Python Basic Object-Oriented Python Creating a Memory Game Card Class

Stefan Rakocevic
Stefan Rakocevic
3,401 Points

Couple of questions


so a couple of things I wanted to ask, which i have probably missed so far! Please lend me a helping hand!

  1. The init function builds the attributes of the class, right? Does it do something else other than defining attributes? If we don't use init the other functions would not work, right?

  2. Why don't we use self.location on any of the other functions?

  3. Why don't we use f'{self.card} on the str function but just return self.card?

  4. Why does the dunder main method(?) have these '' ('main') and all the other dunder methods(?) don't (eg. str or name?)

Thank you alot, and I apologize in advance if some of the questions are too basic :)

Have a good day!

2 Answers

Jeff Muday
Jeff Muday
Treehouse Moderator 27,510 Points

You ask some very substantial questions -- it shows you are really thinking about what object orientation implies. That's very cool.

1) __init__ is an initializer or constructor for a particular class. It is called when a class is instantiated (or is created).

Another custom method of a class can be defined to do the other work of the class, and yes it can initialize/change properties too.

Python can be written with an object-oriented focus, but can also be written "functional programming" style. It's totally flexible.

2) Lacy is using self.location very specifically. You could write 'setters' and getters' (specific Python methods to set properties if you wanted). But it makes sense to manipulate those directly (when you change a location, for example).

3) You have cleverly identified a best practice for object types! Lacy is keeping it simple for this example.

4) I think you are identifying that a Python program can be an object too. The program does have dunder properties and methods, but these are fairly limited. It is a special case at the top-level of a program. You don't have self to reference. Later on, you'll make more use of these.

Take a look at this concise resource it should come in handy: https://www.geeksforgeeks.org/dunder-magic-methods-python

Have a great Python journey, you've got quite a bit of natural curiosity which will serve you well!

Stefan Rakocevic
Stefan Rakocevic
3,401 Points

Thank you very much for the friendly reply!