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
相关产品推荐
相关产品推荐

