You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python类中跨函数使用变量报错AttributeError的解决方法

问题分析与修复方案

错误原因

  1. 调用顺序颠倒:__init__里先执行了self.refresh(),但ip_range2是在self.gateway_find()中定义的,此时ip_range2还未被创建,必然触发属性不存在的错误。
  2. 变量名拼写错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:45:30