Python super()是函数还是关键字?
“function”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)
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()
就是该类的一个实例,对吗?