Seymore4Head wrote: > Because the topic of that lesson was getter setter. > I can construct an __init___ but I was practicing get/set.
What lesson is that? Using getters/setters is discouraged in Python. > This stuff is coming to me slowly. I need to rinse and repeat quite a > few more times, before I follow what is going on. Start with the simplest class possible: class MyClass: pass Right now, that class has a name, "MyClass", no methods, and no data. But we can still create an instance. Call the class, as if it were a function, to create the instance: obj = MyClass() What's the relationship between instances and classes? Classes are a general type of entity, instances are a specific example of that entity. You can have many instances from a class. So: Class: Dog Instances: Rin-Tin-Tin, Lassie, Hooch (from the "Turner and Hooch" movie), Marmaduke, Gaspode the Wonder Dog, Spike the Bulldog, etc. Class: Wizard Instances: Gandalf, Dumbledore, the Wizard of Oz, Rincewind, etc. Class: int Instances: 0, 1, 2, -5, 23, 19874023, etc. You can confirm that obj is now an instance of MyClass: print(isinstance(obj, MyClass)) will print True. What can you do with obj? It has no interesting methods, and no data. But we can give it some! Python, unlike some languages, allows you to dynamically add data attributes to instances on the fly, without pre-defining them. obj.value = 23.0 obj.message = "hello world!" print(obj.value) print(obj.message) will associate the data 23.0 and "hello world" to the attributes "value" and "message" of the instance obj. Let's make the class a bit easier to use, at the expense of doing a bit more work up front: class MyClass: def __init__(self, value, message): self.value = value self.message = message obj = MyClass(23.0, "hello world") print(obj.value) print(obj.message) The __init__ method is automatically called when you call the class as if it were a function. Because the __init__ method has two arguments (plus the special "self" argument), you have to call the class with two arguments. They get used as the value and message respectively. Or we can give it getters and setters: class MyClass: def set_value(self, value): self.value = value def get_value(self): return self.value def set_message(self, message): self.message = message def get_message(self): return self.message obj = MyClass() obj.set_value(23.0) obj.set_message("hello world") print(obj.get_value()) print(obj.get_message()) If you're thinking that's a lot of extra work for not much benefit, 99.99% of the time you're right. -- Steven -- https://mail.python.org/mailman/listinfo/python-list