课前和__init__之前的日志记录装饰不同?

时间:2020-08-24 05:37:16

标签: python python-3.x oop logging decorator

我正在研究如何记录。我想在宣布新员工时制作日志记录系统日志。 这是我的代码。

@employee_log
class Employee:

    def __init__(self, name: str, pay: int):
        self.name = name
        self.pay = pay
        self.__pay_raise_rate = 1.03

在某个时候,我想知道如果将@employee_log放在__init__的头上怎么办。 看起来像

class Employee:

    @employee_log
    def __init__(self, name: str, pay: int):
        self.name = name
        self.pay = pay
        self.__pay_raise_rate = 1.03

但是它不起作用。错误说

TypeError: __init__() missing 1 required positional argument: 'pay'

它们之间有什么问题和区别?

我的雇员日志是


class employee_log:
    def __init__(self, orig_func):
        self.orig_func = orig_func
        logging.basicConfig(filename='{}.log'.format(orig_func.__name__), level=logging.INFO,
                            format='%(asctime)s:%(levelname)s:%(message)s')

    def __call__(self, *args, **kwargs):
        logging.info('Ran with args {}, kwargs {}'.format(*args, **kwargs))
        return self.orig_func(*args, **kwargs)

0 个答案:

没有答案