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

2024-06-28 15:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

This is the base class

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

AttributeError: 'super' object has no attribute '__name__'

为什么第一条语句成功地打印了doc字符串,而第二条语句没有打印类名?另一个事实是错误消息使用super而不是基类的名称来引用所讨论的对象。我会假设super(subclass,self).__name__在内部会被基类替换,所以本质上它是类似于baseclass.__name__的东西。但是,情况显然不是这样,因为错误消息特别提到了一个超级对象。你知道吗


Tags: thenameselfbasedocis错误this
1条回答
网友
1楼 · 发布于 2024-06-28 15:05:59

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

相关问题 更多 >