def __init __(self,* args,** kwargs)在python中初始化类

时间:2014-04-12 08:00:50

标签: python c++

我是Python新手。我在我正在研究的OpenFlow控制器中遇到了Python代码。

class SimpleSwitch(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]

    def __init__(self, *args, **kwargs):
        super(SimpleSwitch, self).__init__(*args, **kwargs)
        self.mac_to_port = {}

我的问题如下。

  1. __init__是类的构造函数吗?

  2. self与C ++的this指针相同吗?

  3. super(SimpleSwitch, self).__init__(*args, **kwargs)是否意味着调用父/超类的构造函数?

  4. 您可以将新成员添加到self mac_to_port吗?或者是否已经添加并在此处进行初始化?

2 个答案:

答案 0 :(得分:6)

  1. __init__是初始化者; __new__是构造函数。参见例如this question
  2. 实际上是:Python中实例方法的第一个参数,按惯例称为self,就是实例本身。
  3. 调用父类的初始化,是的。
  4. 除了父类已有的空字典外,它还向SimpleSwitch添加了一个新属性。

答案 1 :(得分:0)

  
      
  1. Python中的Super不像C ++的超级。我没有使用过C ++,但是我可以告诉你,python中的super不是一样的。 python super不是调用父节点,而是调用调用super的类的子节点,然后移动到一个有趣的链中。想想三个分层类系统,其中有一个基类,两个子类到这个基类,两个子类到那些子类。在底层调用super将在其上面调用parent,但是在其中一个二级类中调用super将首先调用他们的孩子,然后它向旁边调用并调用其他类的其他类别然后调用同一级别的孩子。一旦所有相同级别的类及其所有子级被调用,则super调用中间层类的父级。
  2.   

用语言解释很难。观看Raymond Hettinger"超级考虑超级"来自PyCon的谈话。他很好地解释了它是如何工作的,以及为什么python的超级不应被称为超级'