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

Python 使用super()通过子类访问基类内置属性,python,class,python-3.x,inheritance,super,Python,Class,Python 3.x,Inheritance,Super,我正在玩弄super(),以便掌握如何使用它。因此,我尝试使用它通过基类的子类访问基类的\uuu name\uuuuuuu和\uuuu doc\uuuuuu属性。这是我举的一个例子: class baseclass: "This is the base class" class subclass(baseclass): def print_base_name(self): print(super(subclass,self

我正在玩弄super(),以便掌握如何使用它。因此,我尝试使用它通过基类的子类访问基类的
\uuu name\uuuuuuu
\uuuu doc\uuuuuu
属性。这是我举的一个例子:

    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”对象没有属性“
\uuuu name\uuuu


为什么第一条语句成功打印文档字符串,而第二条语句无法打印类名?另一件事是,错误消息使用super而不是基类的名称来引用所讨论的对象。我会假设
super(subclass,self)。\uuuu name\uuuu
将在内部被基类替换,因此本质上它将是类似于
基类的东西。但是,情况显然不是这样,因为错误消息特别提到了一个超级对象。

您使用的是什么版本的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__

是什么让你认为一个类类型应该有一个
\uuuu name\uuuu
属性?它们不是。引用自:“特殊属性:名称是类名。”此外,此链接提供了一个具有特殊类属性的表:
super
的返回值不是类,因此不需要有
\u name\u
属性。但是您不觉得super语句适用于
\u doc\u
而不适用于
\u name\u
很奇怪吗?
super
返回一个没有该属性的类型。