Python super()是函数还是关键字?

Python super()是函数还是关键字?,python,class,oop,super,Python,Class,Oop,Super,“function”super()在python中用于定义类,例如: class Parent: def __init__(self, trait): self.trait = trait class Child(Parent): def __init__(self, primary_trait, secondary_trait): super().__init__(primary_trait)

“function”
super()
在python中用于定义类,例如:

    class Parent:
        def __init__(self, trait):
            self.trait = trait

    class Child(Parent):
        def __init__(self, primary_trait, secondary_trait):
            super().__init__(primary_trait)
            self.secondary_trait = secondary_trait

python中通常使用语法
object.method()
object.attribute
,但是如果
super()
确实是一个函数,为什么它使用相同的语法?我听说在java中它是一个关键字,但我很确定在python中它是一个函数(因为有括号)。

它实际上是一个类,
type(super)
给出了

的输出,正如其他人提到的,
super
是一个类型,所以当你用参数调用它时,你只需实例化它。支持不带参数的
super
要求它在词汇上了解当前类(如前所述,使用
self
类是行不通的)

因此,虽然
super
在技术上不是一个关键字,但它确实得到了编译器的特殊处理。发件人:

虽然
super
不是保留字,但解析器可以识别super在方法定义中的使用,并且只有在找到它时才会传入
\uuuuuuuu类\uuuuuuuuu
单元格。因此,不带参数调用super的全局别名不一定有效


如果它是一个关键字,这将是一个语法错误:
super=42
我不明白你在这里的意思:“但是如果
super()
真的是一个函数,为什么它会使用相同的语法呢?”因为
super()
是在
super()这样的上下文中使用的
初始化(对象)
?(该语法通常在对象名称位于点的左侧时使用)。因为
super()
返回一个
super
对象,并且您正在访问该超级对象上的
\uuu init\uuu
属性。就像
int()。当然,
super
对象作为代理对象存在,提供方法解析顺序中的下一个方法,但任何函数都是类的实例。e、 g.
type(print)
给出一个输出
@Natrium-sure,但是
super的
type
type
,因此
type(super)是type
,这意味着它是一个类。就像
type(int)是type
,或者
class Foo:pass
一样,
type(Foo)是Foo
@Natrium大多数函数都是
的实例。只有类是
的实例<代码>打印
是一个奇怪的例子,因为它是一个内置的。我现在明白了。但是如果
super
是一个类,那么
super()
就是该类的一个实例,对吗?