我想知道如何使用子类的对象访问超类的变量 如果有任何意义,我补充一些变量是以__变量名称方式定义的。任何时候我想用子对象访问变量。 Python说这里没有定义CHILE CLASS TYPE类型的对象。我想知道如何解决这个问题? 我还想补充说,超类没有明确定义,只是从模块中导入。
class AcuExcelSheet ( Worksheet ): ## super class which is imported from module
def __init__(self):
Worksheet.__init__(self)
sheet = AcuExcelSheet()
for row_index in range(sheet.nrows):
for col_index in range(sheet.ncols):
print sheet.cell(row_index,col_index).value
for range_index in range(sheet.nrows): AttributeError:'AcuExcelSheet'对象没有属性'nrows'
我想知道这个类变量调用的语法。因为我可以看到属性nrow已经在Worksheet类的构造函数中定义。
答案 0 :(得分:4)
出了点问题,但不是你所展示的代码。如果Worksheet
真正定义.nrows
,那么您的AcuExcelSheet
将可以访问它。有几种可能性:
Worksheet
没有定义nrows。你提到双下划线的名字。你确定它不是__nrows
吗?Worksheet
定义了nrows,但仅限于某些代码路径,并且您对构造函数的调用不会触及这些代码路径。答案 1 :(得分:2)
如果我误解了某些内容,请原谅我,但是子类是否会自动继承超类的方法?请参阅此示例:
>>> class A(object):
... def __init__(self):
... self.data = "GIMME TEH DATA"
...
>>> a = A()
>>> a.data
'GIMME TEH DATA'
>>> class B(A):
... pass
...
>>> b = B()
>>> b.data
'GIMME TEH DATA'
因此超类A的 init 方法设置data
属性。 B是子类,B的实例自动初始化data
属性。
我的意思是,这部分对我来说似乎完全没用:
def __init__(self):
Worksheet.__init__(self)
(至于其他人,我同意评论者的意见,你需要使用内省或找到文档来找出Worksheet
具有哪些属性 -
>>> a = Worksheet()
>>> print dir(a)
)
答案 2 :(得分:0)
对象实例中没有分离的基类实例字典。作为行
Worksheet.__init__(self)
表示AcuExcelSheet的对象由Worksheet类初始化。所有你可能需要 - 访问基类方法,重新定义,你可以只通过
super(AcuExcelSheet,self).method_name
表达。因此,如果您在子类实例中找不到某些属性,可能需要进行一些额外的初始化。