我在玩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__
的东西。但是,情况显然不是这样,因为错误消息特别提到了一个超级对象。你知道吗
您使用的是什么版本的Python?这两种方法都不能在2.7中运行代码。问题是您将
super
用于旧样式的类:相关问题 更多 >
编程相关推荐