[英]How do I access base class variables through an instance of a child class in Python?
我想知道如何使用子类的对象访问超类的变量。如果有任何意义,我补充说,某些变量是以这种__variable名称的方式定义的。 任何时候我想使用子对象访问变量。 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
对于range(sheet.nrows)中的row_index:AttributeError:'AcuExcelSheet'对象没有属性'nrows'
我想知道此类变量调用的语法。 因为我看到属性nrow已在Worksheet类的构造函数中定义。
出了点问题,但您显示的代码却不对。 如果Worksheet
确实定义了.nrows
,则您的AcuExcelSheet
将可以访问它。 有几种可能性:
Worksheet
没有定义行。 您提到了双下划线名称。 您确定不是__nrows
吗? Worksheet
定义了nrow,但仅针对某些代码路径,您对构造函数的调用不会影响这些代码路径。 如果我误会了什么,请原谅我,但是子类不会自动继承超类的方法吗? 例如:
>>> 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)
。)
对象实例中没有单独的基类实例字典。 作为线
Worksheet.__init__(self)
说AcuExcelSheet的对象由Worksheet类初始化。 您可能需要做的所有事情-访问已重新定义的基类方法,只需执行以下操作即可
super(AcuExcelSheet,self).method_name
表达。 因此,如果您无法在子类实例中找到某些属性,则可能需要进行其他一些初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.