继承问题和“自我”引用

时间:2010-08-17 15:28:06

标签: python

这是我的第一篇文章,所以首先我想说一个巨大的“谢谢!”对于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

1 个答案:

答案 0 :(得分:6)

不要在方法和其他属性名称中使用 TWO 前导下划线:它们具体旨在将父类与子类隔离,这绝对是你的意思想要在这里!将所讨论的方法重命名为_manage_request(单个前导下划线),并且从此过上幸福的生活。并且在将来使用双重前导下划线时,只有当你绝对确定时,你永远不需要该属性的任何覆盖(或从子类方法中获取)(方法只是属性的特殊情况)。

在C ++术语中,单个前导下划线表示protected:允许子类,欢迎访问和覆盖。双引导下划线表示private:意味着即使对于子类也是不干涉的(并且有一些编译器名称可以帮助它)。我很少看到双重领先的下划线用于明确的目的和对此的理解。