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

liv*_*hak 3 c++ python

我是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 = {}
Run Code Online (Sandbox Code Playgroud)

我的问题如下.

  1. __init__类的构造函数吗?

  2. self一样的C++的this指针?

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

  4. 您可以将新成员添加到self作为mac_to_port?或者已经添加了,只是在这里初始化?

jon*_*rpe 6

  1. __init__是初始化者; __new__是构造函数.参见例如这个问题.
  2. 实际上是的:Python中实例方法的第一个参数,self通过约定调用,就是实例本身.
  3. 调用父类的初始化,是的.
  4. SimpleSwitch除了父类已有的外,还添加了一个新属性,一个空字典.

  • 另外,名称`self`是python中的约定,而`this`是C++中的关键字. (2认同)
  • `__init__`比C++构造函数更像`__new__`.构造函数不会*创建一个新对象 - 而是在创建它之后,在它被返回到调用代码之前隐式运行在新创建的对象上,非常像`__init__`.`__new__`创建并返回一个新对象(或者可以检索并返回一个实例),使其更像C++的[`operator new`](http://www.cplusplus.com/reference/new/operator%20new/ ). (2认同)