Python 类中未定义函数名称

Jit*_*ria 3 python-3.x

我写了一个如下所示的类:

class Logger:

    @staticmethod
    def get_timestamp():
        import datetime
        return datetime.datetime.utcnow()
    
    def print_log(self,color, write_level, msg):
        return color

    def log_level_print(self,log_level, write_level, msg):
        if log_level == 'ERROR':
            return print_log(bcolors.FAIL, write_level, msg)
        if log_level == 'WARN':
            return print_log(bcolors.WARNING, write_level, msg)
        if log_level == 'INFO':
            return print_log(bcolors.OKGREEN, write_level, msg)
        if log_level == 'DEBUG':
            return print_log(bcolors.OKBLUE, write_level, msg)
        else:
            print(f"{Logger.get_timestamp()} {bcolors.FAIL}: Invalid LOG type{bcolors.ENDC}")
            return
Run Code Online (Sandbox Code Playgroud)

在这里,我正在使用这个类:

from logger import Logger
demo = Logger()
print(demo.log_level_print('ERROR','ssdsd','sdsdsd'))
Run Code Online (Sandbox Code Playgroud)

我无法调用此函数,出现错误:
NameError: name 'print_log' is not defined

mac*_*www 5

您忘记添加self为类方法的第一个参数以及使用方法时的第一个参数。更正的代码:

class Logger:
    @staticmethod
    def get_timestamp():
        import datetime
        return datetime.datetime.utcnow()

    def print_log(self, color, write_level, msg):
        return color

    def log_level_print(self, log_level, write_level, msg):
        if log_level == 'ERROR':
            return self.print_log(bcolors.FAIL, write_level, msg)
        if log_level == 'WARN':
            return self.print_log(bcolors.WARNING, write_level, msg)
        if log_level == 'INFO':
            return self.print_log(bcolors.OKGREEN, write_level, msg)
        if log_level == 'DEBUG':
            return self.print_log(bcolors.OKBLUE, write_level, msg)
        else:
            print(f"{Logger.get_timestamp()} {bcolors.FAIL}: Invalid LOG type{bcolors.ENDC}")
            return
Run Code Online (Sandbox Code Playgroud)

看,这是我正在运行的代码:

demo = Logger()
print(demo.log_level_print('ERROR','ssdsd','sdsdsd'))
Run Code Online (Sandbox Code Playgroud)

这是结果:
2