我第一次尝试子类化……啊!

我想使用filecmp.dircmp,但它仅在屏幕上打印 无法捕获输出. 所以我认为我应该只是 能够子类返回列表(危险!危险,威尔!简单! 和子类绝不应在同一句子中使用!). 但是,我的 首次尝试(可能是可悲的),导致错误我 不明白. 显然,我做错了什么,但是呢? 我正在使用python 2.2.3,而我得到的错误是'typeError:不能 创建"实例方法"实例. 导入FIERECMP dircmp类(filecmp.dircmp): def my_report_partial_cluse(self): 输出= [] self.report() 对于x self.subdirs.keys(): output.append(self.subdirs [x] .report()) 返回输出 类报告(Filecmp.dircmp.Report): def my_report(self):#打印有关差异的报告 在A和B之间 #输出格式有意糟糕 输出= [] output.append('diff',self.left,self.rigrt) 如果self.left_only: self.left_only.sort() output.append('仅在'中,self.left,':',', self.left_only) 如果self.right_only: self.right_only.sort() output.append('仅在',self.right':',',, self.right_only) 如果self.same_files: self.same_files.sort() output.append('相同文件:',self.same_files) 如果self.diff_files: self.diff_files.sort() output.append('不同的文件:',self.diff_files) 如果self.funny_files: self.funny_files.sort() output.append('与普通文件的麻烦:',, self.funny_files) 如果self.common_dirs: self.common_dirs.sort() output.append('常见子目录:',, self.common_dirs) 如果self.common_funny: self.common_funny.sort() output.append('常见的有趣案例:',, self.common_funny)

# 回答1

罗宾·西伯勒(Robin Siebler)写道: 在这里,您正在尝试将实例方法取代,而不是另一种方法 班级. 杰弗里
# 回答2

" Robin Siebler" 在消息中写道 新闻:95 ************************************@posting.google.c om ... filecmp.dircmp.Report是Filecmp.dircmp类中的一种方法. 你必须 来自另一个类的子类,您无法从方法中子类. 你什么 可能想要定义FEERECMP.DIRCMP的子类(例如您自己的DirCMP) 并定义其中的方法报告(自我). 这意味着你是 覆盖超类的报告()方法. 在您的报告()方法中, 您仍然可以使用filecmp.dircmp.Report方法: filecmp.dircmp.Report(self). 希望这可以帮助.
# 回答3

Robin Siebler 写道: IL打印到sys.stdout,可能是屏幕或其他地方,因此 当然有一种捕获输出的方法: 导入系统,filecmp,cstringio save_stdout = sys.stdout 捕获= cstringio.stringio() sys.stdout =捕获 fileecmp.dircmp('/tmp','/tmp').report() sys.stdout = save_stdout capture.seek(0) 对于我,枚举(捕获)中的行: 打印i,reter(线) capture.close() 但是你为什么要那个呢? 输出格式有目的地糟糕. 您将所有信息作为对象的属性 FEERECMP.DIRCMP返回 - 为什么 未格式所述信息或其子集, 但是最好...? 说: x = filecmp.dircmp('/tmp','/tmp') 在一侧打印"从%d文件中",另一侧打印%d,"%( len(x.left_list),len(x.Right_list)) 打印'%d是共同的(%d文件,%d目录,%d有趣的dimand)'%( Len(X.Common),Len(X.Common_Files),Len(X.Common_dirs), Len(X.Common_Funny)) 或您希望的一切. Alex
# 回答4

>但是你为什么要那个呢? 因为我不知道什么? 严重地. 我喜欢python,但我 不是程序员. 我更像是一个权力用户. 我使用python(或批次 文件或VB),执行特定任务,仅此而已. 我可能会使用 几个星期的语言或工具,然后不回到它 直到我再次需要它,这可能是六个月或2年, 要点,我必须学习我再次忘记的一切. 这是很多测试人员. 我渴望在我的未来 可以将我所有的Python知识下载到芯片上,并在我时上传 需要它(或者更好的是别人的知识) 好像我刚刚学到了它.
# 回答5

在周二,2004年9月14日,上午10:08:25 +0200,亚历克斯·马特利(Alex Martelli)写道:IL打印到sys.stdout,这可能是屏幕或其他地方,因此当然有一种捕获输出的方法:导入系统,进口系统,进口系统, fileecmp,cstringio save_stdout = sys.stdout 我相信sys .__ stdout__有目的是不必 以这种方式"保存" sys.stdout. - - 约翰·兰顿(John Lenton)(jo@grulic.org.ar) - 随机财富: 问:"每个阅读障碍的脑海中有什么燃烧的问题 存在主义者?" 答:"有狗吗?" -----开始PGP签名------------- 版本:gnupg v1.2.4(gnu/linux) ID8DBQFBRZYRGPQU395YKGSRAN/MAKCE0U0GPS4SK4SK4FJAICYKEA8NQ6IFWCFDMRI 8vwtczqdav1meipq8u/p+g4 = = wyvu -----结束PGP签名-----
# 回答6

在文章中 John Lenton 写道:IL打印到sys.stdout,可能是屏幕或其他地方,因此,当然有一种捕获输出的方法:导入sys,filecmp,filecmp,cstringio save stdout stdout = sys.stdout我相信sys .__ stdout__是为了不必以这种方式"保存" sys.stdout. 不,它在那里,所以您可以在原始的Stdout上获得 一定是同一件事... 只是
# 回答7

John Lenton 写道: ...我相信sys .__ stdout__在那里是为了不必以这种方式"保存" sys.stdout. 嗯,几乎,但不完全. 如果您以某种方式"知道"您的sys.stdout 尚未设置其他一些模块,通常是GUI框架, 当然,您无需复制自己的sys.stdout. 但是如果你进入 这种习惯,最终您最终干涉时,您最终会被咬伤 完全有这样的"其他框架". 就个人而言,我更喜欢 培养一个成熟的成语的习惯,例如: redirected_stdout = cstringio.stringio() save_stdout = sys.stdout sys.stdout = redirected_stdout 尝试: ...确实打印的东西... 最后: sys.stdout = save_stdout ...使用redirected_stdout.value ... redirectred_stdout.close() Alex

标签: python

添加新评论