当前位置: 首页 > 面试题库 >

对象的__init __()方法在python中做什么?

卢才艺
2023-03-14
问题内容

在阅读OpenStack的代码时,我遇到了这个问题。

名为“服务”的类继承了基类“对象”,然后在Service的__init__()方法__init__中调用对象的。相关代码如下:

类定义:

class Service(object):

和Service的init方法定义:

def __init__(self, host, binary, topic, manager, report_interval=None,
             periodic_interval=None, *args, **kwargs):

并在Service的init中调用super(此处为“对象”):

super(Service, self).__init__(*args, **kwargs)

我不了解上次通话,object.__init__()它实际上是做什么的?有人可以帮忙吗?


问题答案:

简短的答案是object . init

()方法不执行任何操作,只是检查是否已传入任何参数。有关详细信息,请参见源。

Service 实例上调用时,
super() 调用将委派给object
. init (),并且不会发生任何事情。

但是,当调用 Service 子类的实例时,事情会变得更加有趣。该 超() 调用有可能委托给一些类以外 的对象 ,一类是实例的父但不是家长
服务
。有关它如何工作以及为什么有用的详细信息,请参阅博客文章Python的“超级被认为是超级”!

下面的例子(有点做作)所示的一个子类如何 服务 可能会导致 超级 呼叫 服务 被定向到另一个名为类 颜色

class Service(object):
    def __init__(self, host, binary, topic, manager, report_interval=None,
             periodic_interval=None, *args, **kwargs):
        print 'Initializing Service'
        super(Service, self).__init__(*args, **kwargs)

class Color(object):
    def __init__(self, color='red', **kwargs):
        print 'Initializing Color'
        self.color = color
        super(Color, self).__init__(**kwargs)

class ColoredService(Service, Color):
    def __init__(self, *args, **kwds):
        print 'Initializing Colored Service'
        super(ColoredService, self).__init__(*args, **kwds)

c = ColoredService('host', 'bin', 'top', 'mgr', 'ivl', color='blue')

在示例中,初始化按以下顺序进行:

  1. 初始化有色服务
  2. 初始化服务
  3. 初始化颜色
  4. 初始化对象-除了参数检查外什么也不做


 类似资料:
  • 问题内容: 我正在学习Python编程语言,遇到了一些我不太了解的东西。 用类似的方法: 怎么self办?这是什么意思?它是强制性的吗? 该方法有什么作用?为什么有必要?(等等。) 我认为它们可能是OOP构造,但我不太了解。 问题答案: 你是对的,这些是oop结构。 是一个类的构造函数。该self参数引用对象的实例(如thisC ++)。 分配对象的内存时将调用该方法: self如果要将值与对象持

  • 在Python的类中有很多方法的名字有特殊的重要意义。现在我们将学习__init__方法的意义。 __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。 使用__init__方法 例11.3 使用__init__方法 #!/usr/bin/python # Filename: class_init.py c

  • 在创建类时,我们可以手动添加一个 __init__() 方法,该方法是一个特殊的类实例方法,称为 构造方法(或 构造函数)。 构造方法用于创建对象时使用,每当创建一个类的实例对象时, Python 解释器都会自动调用它。 Python 类中,手动添加构造方法的语法格式如下: def __init__(self,...):     代码块 注意,此方法的方法名中,开头和结尾各有 2 个下划线,且中间

  • 问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变

  • 本文向大家介绍浅谈python中的__init__、__new__和__call__方法,包括了浅谈python中的__init__、__new__和__call__方法的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍关于python中__init__、__new__和__call__方法的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 任何事物都有一个从

  • 问题内容: 在一种方法中,我打电话了。 里面做什么?这不是递归调用吗? 问题答案: Servlet过滤器是责任链设计模式的实现。 所有过滤器都是链接的(按照其在web.xml中的定义顺序)。的是进行到链中的下一个元素。链的最后一个元素是目标资源/ servlet。