如何为Python类添加修改实例属性的方法并设置属性默认值
问题诊断与修正方案
现有代码的核心问题
- 错误将
owner定义为类属性:类属性为所有类实例共享,修改File.owner会导致所有继承自File的实例的owner同步变更,无法实现单个文件/目录单独修改owner的需求。 chown方法逻辑错误:额外创建了无用的self.new_owner属性,且修改的是类属性而非实例自身的owner属性,无法实现预期效果。- 代码冗余:
Directory和PlainFile两个子类重复实现了完全相同的chown方法,没有利用继承特性简化代码。
修正方案
- 在父类
File中定义构造方法,将owner初始化为实例属性,默认值为default - 将
chown方法统一放在父类File中实现,直接修改实例自身的owner属性 - 子类构造方法中调用父类构造方法完成
owner初始化,删除子类中重复的chown实现
修正后完整代码
# 父类,定义通用属性和方法 class File: def __init__(self): # 实例属性,每个实例独立存储,默认值为default self.owner = "default" def chown(self, new_owner): # 仅修改当前实例的owner属性,不影响其他实例 self.owner = new_owner class Directory(File): def __init__(self, name, right): # 调用父类构造方法初始化owner super().__init__() self.name = name self.right = right def __str__(self): return "Directory({},{})".format(self.name, self.right) def __repr__(self): return "Directory({},{})".format(self.name, self.right) class PlainFile(File): def __init__(self, filename): # 调用父类构造方法初始化owner super().__init__() self.filename = filename def __str__(self): return "PlainFile ({})".format(self.filename) def __repr__(self): return "PlainFile ({})".format(self.filename)
运行效果验证
执行测试代码:
file = PlainFile("boot.exe") folder = Directory("Downloads",[]) print(f'file.owner: {file.owner}; folder: {folder.owner}') file.chown("root") folder.chown("isaac") print(f'file.owner: {file.owner}; folder: {folder.owner}')
输出结果与预期完全一致:
file.owner: default; folder: default file.owner: root; folder: isaac
内容的提问来源于stack exchange,提问作者log6829
相关产品推荐
相关产品推荐

