Декораторийн суурь ойлголтод бас нэгэн чухал зүйлийг ойлгох хэрэгтэйг Декораторууд хичээлд үүсгэсэн
log_decorator -ийн жишээн дээр харцгаая.
Эхний гурван нүдний код Декораторууд хичээлийнхтэй ижил тул тайлбарлах шаардлагагүй. Харин 4-р нүдэнд help -ээр hello функцийн талаарх мэдээллийг харахад функцийг wrap гэж гаргасан. Уул нь hello гэж баймаар. Гэхдээ log_decorator декоратор wrap функцийг буцаах тул ажиллагааны энэ төлөв зөв ч програмийн кодод debug хийх буюу ямар нэгэн алдааг илрүүлэхэд асуудал үүсгэнэ. Ажиллагааны энэ төлөв декоратор тавигдсан аль функцээс дуудалт хийгдсэн, функцийн нэр юу болох, кодийн ажлын урсгалыг тогтоох зэрэгт амархан төөрөгдөлд оруулна. Иймээс интерпретаторт асуудлыг зөв ойлгуулан бүгдийг хэвийн горимоор ажлуулахын тулд functools модулийн @wraps декораторыг ашиглаж болно. Декоратор бичихдээ декоратор ашиглана гэдэг нь сонин байж болох үүнд төвөгтэй асуудал байхгүйг
жишээ харуулна. @wraps декораторыг ашиглахын тулд 1 -р нүдэнд functools модулаас wraps -ийг импортлон аваад log_decorator функцэд ирэх функцийг @wraps декораторт дамжуулна. @wraps декоратор багцлагдаж буй функц буюу түүнд дамжуулсан функцийн бүх мета өгөгдлийг гадагш өгөх боломжийг бүрдүүлнэ. Багцлагч wrapper функцуудад дурын параметрүүдийг авах үүднээс ихэнхдээ *arg, **kwargs -ийг тодорхойлон өгөөд тэдгээрийг дуудах функцэд дамжуулдаг. Одоо 3 -р нүдэнд hello функцэд log_decorator декораторыг тавин өгөөд 4 - р нүднийх шиг функцийг help функцэд өгвөл wrap биш hello нэрийг авна. Өөрийн коддоо декоратор ашиглахаар болбол @wraps декораторыг ашиглан интерпретаторийн анхдагч ажиллагааны төлөвийг өөрчлөн кодийн зүгшрүүлэлтийн ажиллагааг хөнгөн, ойлгомжтой болгохыг зөвлөе.