arpho, this new style PyQt connection works for me in PyQGIS Console (Mac OS X 10.7.3, with QGIS 1.7.4)...
def test(layer): print "selection changed"
qgis.utils.iface.mapCanvas().selectionChanged.connect(test)
I had to hit return at an empty prompt to see the printed "selection changed" messages. If I changed the selection multiple times, those would show up upon hitting return.
The only thing I can see that might cause that error is if your 'self' object hasn't had the iface reference assigned. Is this in your __init__() method of your plugin's class?:
self.iface = iface
Or, that iface hasn't been passed to your plugin's class. Check your __ini__.py file for your plugin to make sure it's being passed as an argument to your plugin's class in the def classFactory() method.
Example:
def classFactory(iface):
from my_plugin import MyPlugin
return MyPlugin(iface)