
浙大疏锦行类的装饰器01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546defclass_logger(cls):A class decorator that adds a logger to the class.importlogginglogging.basicConfig(levellogging.INFO)cls.loggerlogging.getLogger(cls.__name__)deflog_method_call(method):defwrapper(self,*args,**kwargs):self.logger.info(fCalling method {method.__name__} with args: {args}, kwargs: {kwargs})returnmethod(self,*args,**kwargs)returnwrapperforattr_name, attr_valueincls.__dict__.items():ifcallable(attr_value)andnotattr_name.startswith(__):setattr(cls, attr_name, log_method_call(attr_value))original_initcls.__init__defnew_init(self,*args,**kwargs):self.logger.info(fCreating instance of {cls.__name__} with args: {args}, kwargs: {kwargs})original_init(self,*args,**kwargs)cls.__init__new_initreturnclsclass_loggerclassCircle:def__init__(self, radius1):self.radiusradiusdefcalculate_area(self):importmathreturnmath.pi*self.radius**2defcalculate_circumference(self):importmathreturn2*math.pi*self.radiusprint(Testing Circle class with logging:)circleCircle(5)circle.logger.info(fRadius: {circle.radius})circle.logger.info(fArea: {circle.calculate_area()})circle.logger.info(fCircumference: {circle.calculate_circumference()})