newstyle classes and __getattribute__

Stefan Sonnenberg-Carstens stefan.sonnenberg at freenet.de
Fri Oct 28 17:26:22 EDT 2005


Hi there,
I'm facing some strange things - but maybe only me is strange - anyway...

i wrote the following code:


+++
class T(object):
	def __init__(self,name='',port=80):
		self.name=name
		self.port=port
+++

looks fine - to me.

Now I can do:


 >>> t = T(name="test",port=8080)
 >>> print t
<__main__.T object at 0x00BE36D0>

 >>> print t.name
test
 >>> dir(t)
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', 
'__hash__', '__init__', '__module__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__', 
'name', 'port']

Everything ok.

Now, I do this:

class T(object):
	def __init__(self,name='',port=80):
		self.name=name
		self.port=port
	def __getattribute__(self,key):
		if key=='somekey':
			return None

where

 >>> dir(T)
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', 
'__hash__', '__init__', '__module__', '__new__', '__reduce__', 
'__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']

is ok, also.

But, then surprise:
 >>> t = T(name="test123",port=443)
 >>> dir(t)
[]

What the hell is going wrong here ?
I'm running Python 2.4.2 from python.org on Windows XP SP2, all patches 
applied.

Thx in advance.




More information about the Python-list mailing list