Python:在基类中使用派生类属性

mit*_*tal 5 python inheritance

当我遇到这个特定的代码时,我正在阅读一些代码,其中基类方法正在打印来自派生类的一些属性,调用该方法的对象来自派生类。

class A(object):
  def printFreak(self):
    print self.derived_attrib

class B(A):
  def __init__(self, num):
    self.derived_attrib = num

my_obj = B(10)
my_obj.printFreak()
Run Code Online (Sandbox Code Playgroud)

因为我以前没有见过这样的行为(比如在 C++ 中),所以我无法理解这一点。

谁能帮助我理解这一点,这是如何运作的?这可能与 C++ 的某些概念有关吗?

khe*_*ood 3

derived_attrib在Python中,属性是在运行时解析的,因此它只是在 引用的对象中查找调用的属性self,并发现有一个。

只要将derived_attrib声明为 的字段A,然后在 中赋值,它就可以在 C++ 中工作B,因为这样编译器就能够弄清楚in 的方法的self.derived_attrib含义。A