new style class
use decorator definition helper from functools