【发布时间】:2015-07-30 20:44:39
【问题描述】:
我正在学习 Python 中的 OOP,我惊讶地发现在另一个 post 中,父类可以访问子类中定义的类变量,如下例所示。我可以理解 child 可以访问在继承的父 bc 中定义的类变量(或者它不是继承而是其他的东西?)。是什么使这成为可能,它是否意味着子类从超类继承时可以添加(并且其超类可以访问)的类变量池?
class Parent(object):
def __init__(self):
for attr in self.ATTRS: // accessing class variable defined in child?
setattr(self, attr, 0)
class Child(Parent):
#class variable
ATTRS = ['attr1', 'attr2', 'attr3']
def __init__(self):
super(Child, self).__init__()
【问题讨论】:
-
您正在使用
self访问这些变量。self是Child而不是Parent的直接实例,因此它可以访问这些内容。这就是属性查找的工作原理。 -
是
self在你指的父类? -
@Pippi
self在两个地方都是 same 实例 - 它是您用来实例化它的任何类的实例(从类生成的对象)(@在这种情况下为 987654331@)。从Child来看,它本身就是一个实例。从Parent来看,它是其子类之一的实例。 -
@Pippi 这样想:
self总是意味着“我自己的一个实例或我的超类或子类” - 所以是的,父类上的方法可以可以访问其子类的实例成员(属性或方法)。我推荐 Raymond Hettinger 关于这个话题的演讲 Python's Class Development Toolkit。 -
(他在34m38s处理这个具体案例)
标签: python oop inheritance