[Tutor] Getting/setting attributes

Vince Spicer vince at vinces.ca
Wed Sep 22 00:40:40 CEST 2010


On Tue, Sep 21, 2010 at 4:16 PM, bob gailer <bgailer at gmail.com> wrote:

>  On 9/21/2010 5:06 PM, lists wrote:
>
>> Hi tutors,
>>
>> I'm trying to each myself programming and come from a background in
>> system administration with some experience in scripting (so I'm very
>> new to it).
>>
>> Currently I'm grappling with the concept of object orientating
>> programming and have a question about setting&  getting attributes.
>>
>> As I understand it, it makes most sense to set/get the attribute of an
>> object using a method rather than doing it directly.
>>
>
> My opinion - unless there is some verification or translation or action
> required it is better (easier, clearer) to just access and assign the
> attribute directly.
>
>
>  I've been reading various ways of doing this, and the information seems a
>> little
>> contradictory.
>>
>>  Example, please?
>
>  I've muddled my way through the code below to try and force setting or
>> getting the 'address' attribute through the address method rather than
>> allowing direct access.
>>
> Just because you have a getter and setter does not prohibit direct
> reference to _address.
>
>> Does this make sense to you?
>>
>>
>> class Computer(object):
>>
>>    def __init__(self):
>>        """instantiate the class with default values"""
>>        self.address = ""
>>
>>  I suggest (if you want to go the setter/getter route that you initialize
> _address, just in case someone tries to reference it without setting it.
>
>
>     @property # use the property.getter decorator on this method
>>    def address(self):
>>        return self._address
>>
>>    @address.setter #use the property.setter decorator on this method
>>    def address(self, addrvalue):
>>        self._address = addrvalue
>>
>> computer1 = Computer()
>> computer1.address = "test"
>> print computer1.address
>>
>>
> --
> Bob Gailer
> 919-636-4239
> Chapel Hill NC
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>


Hello Bob,

Here is a working example of what I think you are trying to achieve. In this
example the address is set via the setter
and some simple validation is there and the private var isn't available as
__address but get rewritten to _Computer__address (so not private but not
obvious)


class Computer(object):
    def __init__(self):
        self.__address = None
        # see note on private vars in Python
http://docs.python.org/tutorial/classes.html?highlight=private#private-variables

   @property
    def address(self):
        return self.__address

    @address.setter
    def address(self, value):
        if value not in ("available", "criteria"):
            raise AttributeError("Nope")
        self.__address = value


Hope that helps,

Vince Spicer


-- 
Sent from Ubuntu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100921/456b457a/attachment.html>


More information about the Tutor mailing list