繁体   English   中英

如何通过Python中子类的实例访问基类变量?

[英]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将可以访问它。 有几种可能性:

  1. Worksheet没有定义行。 您提到了双下划线名称。 您确定不是__nrows吗?
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM