这是我的第一篇文章,所以首先我想说一个巨大的"谢谢!" 一直到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)
Run Code Online (Sandbox Code Playgroud)
__do_in_forked_process()方法包含一个self.__manage_request()在父类中定义并在子类中重写的方法.
在子类中,当我使用使用的方法self.start()问题就出来了:自.__执行manage_request()方法是在父类而不是方法定义的一个定义的子类(即使,我想,当我做self.start()start方法及其中的所有内容应该引用子对象而不是父对象.
提前致谢!
turkishweb
不要在方法和其他属性名称中使用两个前导下划线:它们专门用于将父类与子类隔离,这绝对是您不想要的!将所讨论的方法重命名为_manage_request(单个引导下划线),并且从此过上幸福的生活.并且在将来使用双重前导下划线时,只有当你绝对确定你永远不会想要该属性的任何覆盖(或从子类方法中获取)时(方法只是属性的特殊情况).
在C++术语中,单个前导下划线表示protected:允许子类,欢迎访问和覆盖.双引导下划线意味着private:即使对于子类也是如此(并且使用一些编译器名称修改来帮助它).我很少看到双重领先的下划线用于明确的目的和对此的理解.