【发布时间】: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 对象。
【问题讨论】:
-
是什么让您认为类类型应该具有
__name__属性?他们没有。 -
引用docs.python.org/3/reference/datamodel.html:“特殊属性:name 是类名。”此外,此链接提供了一个具有特殊类属性的表:docs.python.org/3/library/…
-
除了
super的返回值不是一个类,因此不需要有__name__属性。
标签: python class python-3.x inheritance super