使用super()通过子类访问基类内置属性

时间:2016-02-17 04:05:32

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

我正在玩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()

运行代码后,我收到了这个输出:

  

这是基类

然后出现一个基本上说错误的错误:

  

属性错误:'超级'对象没有属性' __name__'

为什么第一个语句成功打印文档字符串,而第二个语句无法打印类名?另一件事是错误消息使用 super 而不是基类'用于引用相关对象的名称。我原以为super(subclass,self).__name__会在内部被基类取代,所以基本上它会模糊地类似于baseclass.__name__。但是,显然情况并非如此,因为错误消息明确提到了 super 对象。

1 个答案:

答案 0 :(得分:0)

您使用的是哪个版本的Python?这些方法都不能在2.7中运行代码。问题是你将{{1}}用于旧式的类:

{{1}}