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

使用Python 3中调用super()的4种方法中的哪一种?

景靖琪
2023-03-14
问题内容

我想知道何时使用什么风格的Python 3
super()。

Help on class super in module builtins:

class super(object)
 |  super() -> same as super(__class__, <first argument>)
 |  super(type) -> unbound super object
 |  super(type, obj) -> bound super object; requires isinstance(obj, type)
 |  super(type, type2) -> bound super object; requires issubclass(type2, type)

到目前为止,我super()仅使用了没有参数的方法,并且按预期方式工作(由Java开发人员使用)。

问题:

  • 在这种情况下,“约束”是什么意思?
  • 绑定和未绑定的超级对象有什么区别?
  • 什么时候使用super(type, obj),什么时候使用super(type, type2)
  • 像这样命名超级类会更好Mother.__init__(...)吗?

问题答案:

让我们使用以下类进行演示:

class A(object):
    def m(self):
        print('m')

class B(A): pass

未绑定super对象不会将属性访问分配给类,您必须使用描述符协议:

>>> super(B).m
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'super' object has no attribute 'm'
>>> super(B).__get__(B(), B)
<super: <class 'B'>, <B object>>

super 绑定到实例的对象提供了绑定方法:

>>> super(B, B()).m
<bound method B.m of <__main__.B object at 0xb765dacc>>
>>> super(B, B()).m()
m

super 绑定到类的对象给出函数(根据Python 2的未绑定方法):

>>> super(B, B).m
<function m at 0xb761482c>
>>> super(B, B).m()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: m() takes exactly 1 positional argument (0 given)
>>> super(B, B).m(B())
m

见米歇尔Simionato的“事情了解Python的超级”博客文章系列(1,2,3)了解更多信息



 类似资料:
  • 本文向大家介绍Python中的super()方法使用简介,包括了Python中的super()方法使用简介的使用技巧和注意事项,需要的朋友参考一下 子类里访问父类的同名属性,而又不想直接引用父类的名字,因为说不定什么时候会去修改它,所以数据还是只保留一份的好。其实呢,还有更好的理由不去直接引用父类的名字, 这时候就该super()登场啦—— 当然 Python 2 里super() 是一定要参数的

  • 问题内容: 我使用两个PHP脚本来移动大量数据:一个在客户端使用命令行PHP脚本,另一个在Apache之后。我将数据发布到服务器端,并使用php:// input流将其保存在Web服务器端。为了防止达到任何内存限制,对于每个POST请求,将数据分成500kB的块。所有这些都很好。 现在,为了节省带宽并加快速度,我想在发送之前先压缩数据,然后在另一端接收时解压缩。我发现3对函数可以完成这项工作,但是

  • 问题内容: 我正在扩展一个类并覆盖一个方法。我要做的只是调用super,但是调用了一个经过修改的参数,该参数被其方法之一拦截。一个例子使它更加清楚: 我宁愿使用不需要自己的编译器的工具。最佳选择是什么? 问题答案: 鉴于这是一个接口,您可以考虑使用动态代理,该代理将: 包装原始foo 拦截所有消息并将其转发给原始foo 上面的链接中有一个完整的示例。这只是想法: 请注意,如果不是接口,您仍可以手动

  • 本文向大家介绍JavaScript中5种调用函数的方法,包括了JavaScript中5种调用函数的方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! JavaScript,调用函数的5种方法 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascri

  • 本文向大家介绍在Python中调用ggplot的三种方法,包括了在Python中调用ggplot的三种方法的使用技巧和注意事项,需要的朋友参考一下 本文提供了三种不同的方式在Python(IPython Notebook)中调用ggplot。 在大数据时代,数据可视化是一个非常热门的话题。各个BI的厂商无不在数据可视化领域里投入大量的精力。Tableau凭借其强大的数据可视化的功能成为硅谷炙手可热

  • 我有一个字符串中的下一个代码: 问题是,如果我想获取每个和上包含的所有字符串,但我不知道如何获取的最佳方法是什么,使用regexp,下一个模式就不能很好地工作:因为这将在或上失败,我如何修复这个问题,确保所有@lang调用都被检查成功?谢谢!