class Tokidate(object): class _property(object): def __get__(self, inst, cls): print 'prop.__get__(%r,%r)' % (inst, cls); return 42 def __set__(self, name, value): print 'prop.__set__(%r,%r)' % (name, value) toki = _property() class BTClass(type): def __setattr__(self, attr, value): if attr == 'toki': print "cls.__setattr__(%r,%r)" % (attr, value) else: type(Tokidate).__setattr__(self, attr, value) Tokidate = BTClass('Tokidate', Tokidate.__bases__, dict(Tokidate.__dict__))