Python 使用super()通过子类访问基类内置属性
我正在玩弄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
\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
返回一个没有该属性的类型。