Python类中跨函数使用变量报错AttributeError的解决方法
问题分析与修复方案
错误原因
- 调用顺序颠倒:
__init__里先执行了self.refresh(),但ip_range2是在self.gateway_find()中定义的,此时ip_range2还未被创建,必然触发属性不存在的错误。 - 变量名拼写错误:
gateway_find方法里的self.iprange_1是笔误,正确名称应为self.ip_range1(少了下划线),就算调用顺序正确,这里也会触发另一个属性错误。
修复后的代码
class Uygulama(object): def __init__(self): self.araclar() # 先调用gateway_find初始化ip_range2,再执行refresh self.gateway_find() self.refresh() def refresh(self): # 此时self.ip_range2已完成初始化,可正常使用 self.a, self.b = srp(Ether(dst="FF:FF:FF:FF:FF:FF") / ARP(pdst=self.ip_range2), timeout=2, iface="eth0", retry=3) # 其他无关代码 def gateway_find(self): # 获取当前连接的IP网段 self.ip_range = conf.route.route("0.0.0.0")[1] self.ip_range1 = self.ip_range.rpartition(".")[0] # 修正变量名拼写错误 self.ip_range2 = self.ip_range1 + ".0/24"
类函数间共享变量的注意事项
- 控制初始化顺序:调用使用属性的函数前,必须先调用初始化该属性的函数,通常在
__init__里调整调用顺序来保证。 - 统一使用实例属性:所有需要跨方法共享的变量,都通过
self.变量名的方式定义和访问,确保类内所有方法都能获取到。 - 检查变量名一致性:属性名要严格匹配,避免大小写、下划线等笔误导致的属性不存在问题。
内容的提问来源于stack exchange,提问作者user21109117
相关产品推荐
相关产品推荐

