当我遇到这个特殊的代码时,我正在阅读一些代码,其中基类方法打印一些来自派生类的属性,调用方法的对象来自派生。
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()
由于我之前没有见过这样的行为(比如在C ++中),我无法理解这一点。
任何人都可以帮助我理解这一点,这是如何工作的?这可能与C ++的一些概念有关吗?
答案 0 :(得分:2)
在Python中,属性是在运行时解析的,因此它只是在derived_attrib
所引用的对象中查找名为self
的属性,并发现有一个。
只要将derived_attrib
声明为A
的字段,然后在B
中进行赋值,它就可以在C ++中工作,因为这样编译器便可以找出{{1 }}是self.derived_attrib
方法中的意思。