【问题标题】:Example using 'super' In Python2.7 [duplicate]在 Python2.7 中使用“super”的示例 [重复]
【发布时间】:2015-09-06 12:22:04
【问题描述】:

我正在尝试在 python 中使用 super 扩展我的类初始化。在下面的示例中,我希望 Class A 初始化乘以 4 的参数,并且我希望此参数通过继承在 B 类中可用。然后我希望 B 中的另一个初始化采用相同的参数并将其乘以 8。第二次初始化不必在 A 中可用。

class A():
    def __init__(self,parameter):
        self.initialize_parameter=4*parameter

class B(A):
    def __init__(self,parameter): #note this parameter is intended to be the same parameter from Class A
        self.another_parameter=parameter*8
        super(B,self).__init__(parameter)

我一直在阅读的文档似乎表明以上是正确的语法(我认为),但是关于这个主题的文档相当混乱。以上代码返回TypeError: must be type, not classobj。

这是我第一次使用继承,谁能指出我做错了什么?

【问题讨论】:

  • FWIW,更常见的做法是调用超级 __init__(如果你需要调用它)作为子 __init__ 中的第一个命令,而不是在最后这样做。这样子初始化器就更容易覆盖或增加由超级初始化器完成的工作。

标签: python inheritance super


【解决方案1】:

正确的语法是class A(object),而不是Class A()。

请注意,我将关键字 class 都小写了(这让我相信您在此处的代码不是复制粘贴的 - 就您没有尝试过的代码寻求帮助是个坏主意运行!),并且还在括号内添加了单词object,以将其标记为新型Python类。后者是惯用的,如果不是绝对必要的话。

当我尝试完全按照您编写的代码运行您的代码时,我得到SyntaxError: invalid syntax。当我将单词 class 小写时,我在 Python 2.7 上完全没有错误。

【讨论】:

  • 值得一提的是,super 不受旧式类的支持,即那些最终不会继承自 object 的类。这就是TypeError 异常的原因。
  • 是的,你是对的。我试图在没有实际测试代码的情况下抽象出我的情况,并且显然犯了错误 - 一个坏主意,要点
  • 你的意思是在我的例子中我必须在类定义中添加参数,即第一行是class A(parameter)?
  • @user3059024:您确实需要class A(object): 作为A 定义的第一行。
  • @user3059024:没问题。但是object 并不完全是一个关键字:它是其他(新式)类继承的基类对象。从object 类派生的一个重要能力是使用super()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
相关资源
最近更新 更多