如何正确获取Pygments guess_lexer返回的Lexer类名?
优雅获取Pygments识别出的Lexer类名
嘿,你完全不用搞继承重写或者字符串处理这种麻烦事!Python本身就提供了直接获取类名的标准方式,而Pygments的Lexer类也完美支持这一点,绝对优雅。
直接访问类的__name__属性
guess_lexer()返回的其实是对应的Lexer子类(比如PythonLexer)的类对象,而Python中每个类都有一个__name__属性,直接存储了类的名称字符串,完全就是你想要的部分!
修改你的代码如下:
from pygments.lexers import guess_lexer text = "string containing source code" lexer_cls = guess_lexer(text) print(lexer_cls.__name__) # 输出:PythonLexer
为什么这是最优方案?
- Pythonic:这是Python获取类名的标准做法,符合语言设计的本意
- 可靠:不像字符串分割(比如
str(lexer_cls).split('.')[-1].strip('>'))依赖Pygments的__repr__格式,哪怕Pygments内部模块结构调整,__name__属性也不会变 - 简洁:一行代码就能搞定,完全不需要额外的处理逻辑
额外说明:如果是Lexer实例怎么办?
如果你后续创建了Lexer的实例(比如lexer = lexer_cls()),想要获取它的类名,只需要访问实例的__class__.__name__:
lexer = lexer_cls() print(lexer.__class__.__name__) # 同样输出:PythonLexer
内容的提问来源于stack exchange,提问作者UnderpoweredNinja
相关产品推荐
相关产品推荐

