这是我的第一篇文章,所以首先我想说一个巨大的“谢谢!”对于stackoverflow社区一直有一个答案为我做了窍门:)
我在处理python的继承时遇到了问题。
我有一个包含以下代码的父类:
def start(self):
pid = os.fork()
if (pid==0):
self.__do_in_forked_process()
elif(pid > 0):
self.__do_in_parent_process()
else:
print ("Error while forking...")
sys.exit(1)
__do_in_forked_process()方法包含一个方法self.__manage_request()
,该方法在父类中定义并在子类中重写。
在子类中,当我使用方法self.start()
时出现问题:执行的self .__ manage_request()方法是父类中定义的方法,而不是子类中定义的方法(甚至如果,我想,当我执行self.start()时,start方法及其中的所有内容应该引用子对象而不是父对象。
提前致谢!
turkishweb
答案 0 :(得分:6)
不要在方法和其他属性名称中使用 TWO 前导下划线:它们具体旨在将父类与子类隔离,这绝对是你的意思不想要在这里!将所讨论的方法重命名为_manage_request
(单个前导下划线),并且从此过上幸福的生活。并且在将来使用双重前导下划线时,只有当你绝对确定时,你永远不需要该属性的任何覆盖(或从子类方法中获取)(方法只是属性的特殊情况)。
在C ++术语中,单个前导下划线表示protected
:允许子类,欢迎访问和覆盖。双引导下划线表示private
:意味着即使对于子类也是不干涉的(并且有一些编译器名称可以帮助它)。我很少看到双重领先的下划线用于明确的目的和对此的理解。