python之if __name__ == “__main__”详解 || python获取当前运行程序的类名和方法名 || python获取当前程序运行程序的模块名

if __name__  == “__main__”:

详细解释:

1、每个python模块都包含内置的变量 __name__ 。( __name__ 是python的一个内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称)

2、当在自身模块里执行的时候, __name__ 等于当前执行文件的名称【模块名】(包含了后缀.py)但是又由于 '__main__' 等于当前执行文件的名称【模块名】(包含了后缀.py)。进而当模块被直接执行时, __name__ == '__main__' 结果为真。

3、如果该模块被import到其他模块中,则该模块的 __name__ 等于该模块名称(不包含后缀.py)。

python获取当前运行程序的类名和方法名

1、获取当前运行程序的类名: self.__class__.__name__ 

复制代码
import sys


class Hello:

    def hello(self):
        print('the name of method is ## {} ##'.format(sys._getframe().f_code.co_name))
        print('the name of class is ## {} ##'.format(self.__class__.__name__))


if __name__ == "__main__":
    h = Hello()
    h.hello()
复制代码

运行结果:

the name of method is ## hello ##
the name of class is ## Hello ##

2、获取当前运行程序的方法名

①从函数内部获取函数名: func.__name__ 

def hello_word():
    print(hello_word.__name__)


if __name__ == '__main__':
    hello_word()  # 运行结果:hello_word

②从函数外部获取函数名: getattr(func, '__name__') 

def hello_word():
    print('Hello Word!')


if __name__ == '__main__':
    hello_word()  # 运行结果:Hello_Word!
    print(getattr(hello_word, '__name__'))

运行结果:

Hello Word!
hello_word

③从函数内部获取函数本身的名字

复制代码
# -*- encoding:utf-8 -*-
import sys


def hello_word():
    print(sys._getframe().f_code.co_name)


if __name__ == '__main__':
    hello_word()  # 运行结果:hello_word
复制代码

④使用inspect模块动态获取当前运行的函数名

复制代码
import inspect
 

def get_current_function_name():
    return inspect.stack()[1][3]

class MyClass:
    def function_one(self):
        print "%s.%s invoked"%(self.__class__.__name__, get_current_function_name())
if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()
复制代码

运行结果:

MyClass.function_one invoked

【注意】:一般来说,获取当前运行函数的函数名多用于装饰器函数中,用于调用方法前以及调用方法后;

举例:

复制代码
# 定义一个装饰器,为修饰测试方法提供附加操作(测试方法调用前,测试方法调用后)
def record(module_name):
    def decorate_log(func):
        @wraps(func)
        def log(*args, **kwargs):
            print(f'------{module_name}模块---开始执行{func.__name__}测试脚本------')
            try:
                func(*args, **kwargs)
            except Exception as e:
                print(f'------{module_name}模块---{func.__name__}测试脚本执行失败,失败原因:{e}------')
                raise e
            else:
                print(f'------{module_name}模块---{func.__name__}测试脚本执行成功------')

        return log

    return decorate_log
复制代码

python获取当前程序运行程序的模块名

import os

module_name = os.path.basename(__file__).split('.')[0]

if __name__ == '__main__':
    print(module_name)

 

posted @   习久性成  阅读(1837)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示