Yes, I was "pissed off" almost like you first times I had to write down row.thetablename.field inside a virtualfield function.
And this is why I encapsulated them into a wrapper in weppy (
http://weppy.org/docs/dev/dal/virtuals#virtual-fields) so the default behaviour is to bind them to the table, but changing the apis means breaking the backward compatibility to any application used them (and weppy too, but that's minor since I can update it).
Anyway, I don't understand how this will solve your problem, since you still have to pass the tablename parameter to the lambda when defining the template table, but this would be different in the other tables, and you will encounter the same problem as before.
In weppy virtualfields are inherited because models do the magic behind the scenes, re-binding the virtual functions to their instance, but doing the same in pydal would be quite a mess (tables are all the same objects).
tl;dr: IMHO inheritance works good when you use classes.
/Giovanni