Python中如何在方法内访问类变量?解决NameError问题
解决类方法中访问类变量的NameError问题
你的问题出在类定义还没完成时就调用了内部方法,并且方法里引用了未绑定的类名。
当Python执行到类a内部的foo()调用时,类a还没有被完全创建,此时a这个名称还没被绑定到类对象上,所以方法里的a.var会找不到名称,抛出NameError。
给你几个可行的解决办法:
方法一:把方法调用移到类定义外面
等类完全创建好之后再调用方法,此时a已经是有效的类名称了:
class a: var = 0 def foo(): print(a.var) # 类定义完成后再调用方法 a.foo() b = a()
方法二:规范定义静态方法,避免提前引用类名
如果foo是不需要实例的工具方法,可以用@staticmethod装饰器声明,同时如果要在类定义阶段访问类变量,直接用变量名即可(类定义内部的作用域可以直接访问类变量):
class a: var = 0 @staticmethod def foo(): # 类定义阶段直接访问var,不用类名 print(var) # 同样移到类外调用 a.foo() b = a()
方法三:改为实例方法(如果需要操作实例)
如果foo需要处理实例,应该定义成带self参数的实例方法,此时可以通过self.__class__.var或者直接a.var访问类变量,调用时通过实例触发:
class a: var = 0 def foo(self): # 实例方法中访问类变量的两种方式 print(self.__class__.var) print(a.var) b = a() b.foo()
内容的提问来源于stack exchange,提问作者aaa
相关产品推荐
相关产品推荐

