Python中如何为类实例方法声明同类实例参数?解决NameError报错
Python类实例方法中使用自身类作为参数类型提示的解决方法
当在类的实例方法中直接用类名作为参数类型提示时,会触发NameError——因为定义方法时,类本身还未完成定义,解释器找不到对应的名称。下面是几种解决办法:
字符串包裹类名(兼容Python 3.5+)
把类名用字符串包裹,让解释器延迟解析这个类型:class MyClass: def compare(self, other: 'MyClass'): pass启用
annotations未来特性(Python 3.7+)
在文件开头导入该特性后,注解会以字符串形式存储,直到运行时才解析,这样就能直接使用类名:from __future__ import annotations class MyClass: def compare(self, other: MyClass): pass使用
Self类型(Python 3.11+)
从typing模块导入Self(Python 3.8-3.10版本可使用typing_extensions.Self),明确表示参数是当前类的实例,这种写法更直观,还能适配子类继承场景:from typing import Self # Python 3.11+ # Python 3.8-3.10需先安装typing_extensions,再导入: # from typing_extensions import Self class MyClass: def compare(self, other: Self): pass
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

