python - 类实例变量的内在性和类变量的内在性

时间:2015-07-24 23:50:03

标签: python class inheritance

以下代码:

由于Iter Class继承了Parser类class Iter(Parser):

使用Parser类变量定义重复但Iter类特定变量是不通常的吗?

含义

self.totalEntriesI只是Parser类中变量值的接收者,在代码中显示为totalEntires Parser.totalEntires,因此可以使用该值完成工作。

然而这是必要的吗?

我可以通过这样做来实现同样的目标

class Iter(Parser):


def __init__(self, Parser):

    self.totalEntriesI = Parser.totalEntries
    self.perPageI = Parser.perPage
    self.currentPageI = Parser.currentPage

拥抱和亲吻

1 个答案:

答案 0 :(得分:2)

正确,这是不必要的。 Parser的类属性("变量")也可在其子类Iter上使用。

如果将它们分配给实例属性,如图所示,则每个Iter实例将获得自己的值副本 - 如果您需要稍后基于每个实例修改它们,则会很有用,但否则会浪费空间和注意力:):

要注意的一个微妙之处:如果您随后通过子类Iter为其中一个属性赋值,那么Iter将获得自己的副本属性。例如:

>>> class A():  my_attr = 'foo'
>>> class B(A): pass

正如您所期望的那样,

>>> A.my_attr == B.my_attr == 'foo'
True

然而,观察:

>>> B.my_attr = 'bar'
>>> B.my_attr
'bar'
>>> A.my_attr
'foo'