Classes

Seymore4Head Seymore4Head at Hotmail.invalid
Fri Oct 31 13:18:00 EDT 2014


On Sat, 01 Nov 2014 04:06:44 +1100, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:

>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.

I agree it is more work.  But more work means more practice.  I need
more practice figuring out how these commands work.

>obj = MyClass()
>obj.set_value(23.0)
>obj.set_message("hello world")
>print(obj.get_value())
>print(obj.get_message())

I don't know here to get more (simple) practice problems.  I am trying
to invent my own.



More information about the Python-list mailing list