以下代码:
由于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
拥抱和亲吻
答案 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'