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

Python实现类继承时报错NameError: name '_Activity__self'未定义求助

错误原因与修复方案

根因定位

你收到报错的核心原因是错误将双下划线前缀加在了self变量前,写成了__self:
Python对开头为双下划线、结尾无双下划线的标识符会自动执行名称修饰,位于Activity类内的__self会被自动重命名为_Activity__self,而这个变量你从未定义过,因此触发了对应的NameError。

修复方案

你如果是想给类定义私有属性,需要把双下划线加在属性名前,不是加在self前,修改后的可运行代码如下:

class Activity:
    def __init__(self, d, t):
        # 双下划线加在属性名前,定义私有属性
        self.__date = d
        self.__time = t

    def getDate(self):
        return self.__date

    def getTime(self):
        return self.__time


class WakeUp(Activity):
    def __init__(self, d, t):
        # 此处也可以替换为super().__init__(d, t),是Python子类调用父类构造方法的推荐写法
        Activity.__init__(self, d, t)
        self.__activityType = "WakeUp"

    def getType(self):
        return self.__activityType

核心修改点

  • 删除所有加在self前的双下划线,self是类实例方法的固定第一个参数,不需要加任何下划线前缀
  • 私有属性的双下划线统一加在属性名前,对应的getter方法内的属性访问路径同步修改

如果你不需要将类属性设为私有,直接把属性名前的双下划线也去掉,写成self.date = d、self.time = t也可以正常运行,不会触发当前报错。

内容的提问来源于stack exchange,提问作者mak95

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:02