Classes

Rob Gaddi rgaddi at technologyhighland.invalid
Fri Oct 31 13:43:19 EDT 2014


On Fri, 31 Oct 2014 13:18:00 -0400
Seymore4Head <Seymore4Head at Hotmail.invalid> wrote:

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

Fine.  Practice problem that is actually Pythonic.  Define a Rectangle
class.  Give it length and width attributes, no unnecessary
getters or setters.  Give it perimeter() and area() methods.

Define a Square class, subclassed from Rectangle.  Use getters/setters
to enforce that the length and width must be equal.  Confirm that
length and width remain locked, and that perimeter() and area() work
correctly.

-- 
Rob Gaddi, Highland Technology -- www.highlandtechnology.com
Email address domain is currently out of order.  See above to fix.



More information about the Python-list mailing list