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

Python扩展-使用super()Python 3 vs Python 2

常子濯
2023-03-14
问题内容

本来我想问这个问题,但是后来我发现它已经被想到了……

在谷歌搜索中,我发现了扩展configparser的示例。以下适用于Python 3:

$ python3
Python 3.2.3rc2 (default, Mar 21 2012, 06:59:51) 
[GCC 4.6.3] on linux2
>>> from configparser import  SafeConfigParser
>>> class AmritaConfigParser(SafeConfigParser):
...     def __init__(self):
...         super().__init__()
... 
>>> cfg = AmritaConfigParser()

但不支持Python 2:

>>> class AmritaConfigParser(SafeConfigParser):
...       def __init__(self):
...           super(SafeConfigParser).init()
... 
>>> cfg = AmritaConfigParser()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
TypeError: must be type, not classob

然后,我读了一些关于Python New Class vs. Old
Class样式的信息(例如,在这里。现在我很想知道,我可以这样做:

class MyConfigParser(ConfigParser.ConfigParser):
      def Write(self, fp):
          """override the module's original write funcition"""
          ....
      def MyWrite(self, fp):
          """Define new function and inherit all others"""

但是,我不应该叫init吗?这在Python 2中是否等效:

 class AmritaConfigParser(ConfigParser.SafeConfigParser):
    #def __init__(self):
    #    super().__init__() # Python3 syntax, or rather, new style class syntax ...
    #
    # is this the equivalent of the above ? 
    def __init__(self):
        ConfigParser.SafeConfigParser.__init__(self)

问题答案:
  • super()(不带参数)在Python 3中(以及__class__)引入:
    super() -> same as super(__class__, self)
    

这样就相当于新类的Python 2:

    super(CurrentClass, self)
  • 对于老式类,您可以始终使用:
     class Classname(OldStyleParent):
    def __init__(self, *args, **kwargs):
        OldStyleParent.__init__(self, *args, **kwargs)
    


 类似资料:
  • 问题内容: 是否可以在ES6中扩展类而不用调用方法来调用父类? 编辑:这个问题可能会引起误解。 这是我们必须打电话的标准,还是我遗漏了一些东西? 例如: 当我不调用派生类时,我遇到了范围问题-> 我正在v2.3.0中使用iojs –harmony运行它 问题答案: ES2015(ES6)类的规则基本上可以归结为: 在子类构造函数中,只有在被调用之前才能使用。 ES6类构造函数必须是子类,否则必须调

  • 是否可以在ES6中扩展类而不调用方法来调用父类? 编辑:这个问题可能有误导性。这是我们必须调用的标准,还是我遗漏了什么? 例如: 当我不对派生类调用时,我遇到了一个作用域问题- 我用iojs在v2.3.0中运行这个

  • 问题内容: 我目前正在使用Selenium来运行Chrome实例来测试网页。每次我的脚本运行时,都会启动一个干净的Chrome实例(清理扩展程序,书签,浏览历史记录等)。我想知道是否可以使用Chrome扩展程序运行脚本。我曾尝试搜索Python示例,但是当我在Google上搜索时什么都没想到。 问题答案: 您应该使用Chrome WebDriver 选项设置要加载的扩展程序列表。这是一个例子: 希

  • 我目前正在使用Selenium运行Chrome的实例来测试网页。每次我的脚本运行,一个干净的Chrome实例启动(干净的扩展,书签,浏览历史,等等)。我想知道是否有可能运行我的脚本与Chrome扩展。我试着搜索一个Python示例,但是当我用谷歌搜索这个示例时,什么也没有找到。

  • Puppeteer 可以用来测试 Chrome 扩展 注意 Chrome / Chromium 扩展当前只能在非无头模式下使用。 下面的代码用来处理扩展的 background page,该扩展的代码在 ./my-extension: const puppeteer = require('puppeteer'); (async () => { const pathToExtension =

  • 本文向大家介绍使用C++扩展Python的功能详解,包括了使用C++扩展Python的功能详解的使用技巧和注意事项,需要的朋友参考一下 本文主要研究的是使用C++扩展Python的功能的相关问题,具体如下。 环境 VS2005Python2.5.4Windows7(32位) 简介 长话短说,这里说的扩展Python功能与直接用其它语言写一个动态链接库,然后让Python来调用有点不一样(虽然本质是