怎么在同一行里打两行字 怎么在同一类目下增加不同选项
引言
在Python中,类型提示(Type Hints)能够代码的唯一性和可维护性。然而,当在类内部定义类型,并在相同类的方法参数中使用这些类型时,可能会遇到希望的NameError: name '...' is not Defined错误。因为Python在默认情况下,在类定义完成之前,不会完全解析类内部的定义类型。为了解决这个问题,我们可以从使用__future__ 导入注释。使用 from __future__ 导入注释
from __future__ 导入注释是Python 3.7更高版本中引入的一个及特性,它改变了类型提示的处理方式。通过导入这个特性,提示类型会被视为字符串,而不是立即求值。这意味着即使在类定义完成之前,也可以安全地引用类内部定义的类型。
示例代码:from __future__ import commentsclass Lexer: class symbol: def __init__(self, lexeme: str, token: str): self.lexeme: str = lexeme self.token: str = token class SymbolTable: def __init__(self): self.symbols: list[Lexer.symbol] = [] def add_symbol(self, symbol: Lexer.symbol) -gt; None: quot;quot;quot;向符号表添加符号。quot;quot;quot; # 此处实现符号添加逻辑 print(fquot;用 lexeme 添加符号: {symbol.lexeme}, token: {symbol.token}quot;) def add_symbols(self,symbols: list[Lexer.symbol]) -gt; None: quot;quot;quot;向符号表添加多个符号。quot;quot;quot; # 实现多个符号添加逻辑这里 for symbol in symbol: print(fquot;用词位添加符号: {symbol.lexeme}, token: {symbol.token}quot;)# 示例用法lexer = Lexer()symbol_table = lexer.SymbolTable()new_symbol = lexer.symbol(quot;examplequot;, quot;TOKENquot;)symbol_table.add_symbol(new_symbol)symbols = [lexer.symbol(“example1”;,“TOKEN1”;), lexer.symbol(“example2”;, quot;TOKEN2quot;)]symbol_table.add_symbols(symbols)登录后复制
在这个例子中,Lexer.symbol在Lexer.SymbolTable的add_symbol和add_symbols方法中被初始化类型提示。通过在文件开头添加from __future__导入注释,我们可以避免NameError,并且代码能够正确地进行类型检查。
替代方案 (Python 3.10 )
从 Python 3.10 开始,可以使用字符串字面量来表示类型提示,即使没有 from __future__ import 注解也可以工作。class Lexer: 类符号: def __init__(self, lexeme: str, token: str): self.lexeme: str = lexeme self.token: str = token class SymbolTable: def __init__(self): self.symbols: list[quot;Lexer.symbolquot;] = [] def add_symbol(self, symbol: quot;Lexer.symbolquot;) -gt; None: quot;quot;quot;向符号表中添加符号。quot;quot;quot; # 此处实现符号添加逻辑 print(fquot;用 lexeme 添加符号: {symbol.lexeme},token: {symbol.token}quot;) def add_symbols(self, 符号:列表[quot;Lexer.symbolquot;]) -gt; 无: quot;quot;quot;将多个符号添加到符号表。quot;quot;quot; # 在此处实现多个符号添加逻辑 for symbol in symbol: print(fquot;添加符号,其词素: {symbol.lexeme}, token: {symbol.token}quot;)# 示例用法 lexer = Lexer()symbol_table = lexer.SymbolTable()new_symbol = lexer.symbol(quot;examplequot;, quot;TOKENquot;)symbol_table.add_symbol(new_symbol)symbols = [lexer.symbol(quot;example1quot;, quot;TOKEN1quot;), lexer.symbol(quot;example2quot;, quot;TOKEN2quot;)]symbol_table.add_symbols(symbols)登录后复制注意事项确保你的 Python 版本支持 from __future__ import annotations (Python 3.7 )。
即使使用了 from __future__ 导入注释,仍然需要使用类型检查工具(如 mypy)来验证类型提示的正确性。字符串字面量方法 (Python 3.10 ) 可以作为 from __future__ 导入注释的替代方案。总结
通过使用 from __future__ 导入注释,我们可以轻松地在类内部方法参数中提示自定义类型,避免NameError,并提高代码的可靠性和可维护性。掌握这个技巧,可以编写出更加健壮和易于理解的Python代码。记住,类型提示的目的是为了帮助开发者更好地理解代码,并减少潜在的错误。
以上就是如何在同一类中为方法参数提示自定义类型的详细内容,更多请关注乐哥常识网其他相关文章!