2

在下面的代码示例中,我在派生类 b 中使用 self.number,并且 number 在 a(基类)中定义。如果在基类中以这种方式定义数据成员,那么任何派生类都可以访问它吗?

我正在使用 Python 2.7。这是引用基础对象成员变量的正确方法吗?

class a(object):
    def __init__(self, number):
        self.number = number
        print "a __init__ called with number=", number

    def printme(self):
        print self.number



class b(a):
    def __init__(self, fruit):
        super(b, self).__init__(1)
        self.fruit = fruit
        print "b __init__ called with fruit=", fruit

    def printme(self):
        print self.number


cl1 = a(1)
cl1.printme()

cl2 = b("apple")
cl2.printme()
4

1 回答 1

4

除非您在子类中做一些可以消除它的事情,否则可以。分配给 Python 对象的属性只是添加到对象的__dict__(除了相对罕见的情况,即使用插槽或被__setattr__覆盖以执行非标准操作),绑定成员方法的隐式第一个参数将是相同的源自子类或父类的方法。Vanilla 实例属性(尽管不是方法或类属性)不以任何方式绑定到特定的类定义,仅绑定到它们所属的对象实例。

该声明的一个警告是名称以双下划线开头的属性。它们仍将被添加到__dict__和可访问,但它们将被名称损坏,因此如果使用属性名称的损坏转换检索,则只能在定义类之外访问。

于 2013-07-17T13:51:01.407 回答