How to get/set class attributes in Python

Steve Jorgensen nospam at nospam.nospam
Sun Jun 12 06:15:27 EDT 2005


On Sun, 12 Jun 2005 11:54:52 +0200, Kalle Anke <skromta at gmail.com> wrote:

>I'm coming to Python from other programming languages. I like to
>hide all attributes of a class and to only provide access to them
>via methods. Some of these languages allows me to write something
>similar to this
>
>int age( )
>{
>  return theAge
>}
>
>void age( x : int )
>{
>  theAge = x
>}
>
>(I usually do more than this in the methods). I would like to do
>something similar in Python, and I've come up with two ways to do
>it: The first one uses the ability to use a variable number of
>arguments ... not very nice. The other is better and uses 
>__setattr__ and __getattr__ in this way:
>
>class SuperClass:
>	def __setattr__( self, attrname, value ):
>		if attrname == 'somevalue':
>			self.__dict__['something'] = value
>		else:
>			raise AttributeError, attrname
>
>	def __str__( self ):
>		return str(self.something)
>
>class Child( SuperClass ):
>	def __setattr__( self, attrname, value ):
>		if attrname == 'funky':
>			self.__dict__['fun'] = value
>		else:
>			SuperClass.__setattr__( self, attrname, value )
>
>	def __str__( self ):
>		return SuperClass.__str__( self ) + ', ' + str(self.fun)
>
>Is this the "Pythonic" way of doing it or should I do it in a different
>way or do I have to use setX/getX (shudder)

I'm totally new to Python myself, but my understanding is that



More information about the Python-list mailing list