【问题标题】:Accessing base class built-in attributes through subclass using super()使用 super() 通过子类访问基类内置属性
【发布时间】:2016-02-17 04:05:31
【问题描述】:

我正在使用 super() 来了解如何使用它。所以我试图用它通过它的子类访问基类的__name____doc__ 属性。这是我的例子:

    class baseclass:
        "This is the base class"

    class subclass(baseclass):
        def print_base_name(self):
            print(super(subclass,self).__name__)

        def print_base_doc_string(self):
            print(super(subclass, self).__doc__)

    subinstance=subclass()
    subinstance.print_base_doc_string()
    subinstance.print_base_name()

运行代码后,我收到以下输出:

这是基类

然后是一个错误,基本上说:

AttributeError: 'super' 对象没有属性 '__name__'

为什么第一个语句成功打印了文档字符串,而第二个语句却没有打印类名?另一件事是错误消息使用 super 而不是基类的名称来引用有问题的对象。我会假设super(subclass,self).__name__ 将在内部被基类替换,所以本质上它会有点类似于baseclass.__name__。但是,显然情况并非如此,因为错误消息特别提到了一个 super 对象。

【问题讨论】:

标签: python class python-3.x inheritance super


【解决方案1】:

您使用的是哪个版本的 Python?这些方法都不能在 2.7 中运行您的代码。问题是您将super 与旧式类一起使用:

class baseclass:
    "This is the base class"

class subclass(baseclass):

    def print_base_name(self):
        print baseclass.__name__

    def print_base_doc_name(self):
        print baseclass.__doc__

【讨论】:

  • 但是您不觉得 super 语句适用于__doc__ 但不适用于__name__ 很奇怪吗?
  • super 返回一个没有该属性的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2017-10-24
  • 1970-01-01
  • 2017-06-17
  • 2013-07-30
  • 1970-01-01
相关资源
最近更新 更多