python中如何获取类的属性_从python中的超级类获取属性

在BaseClass.__init__()运行以设置属性之前,无法访问self.config_array。在

修复FirstOrderSubClass以同时调用基类__init__,或者直接调用它。在

修复FirstOrderSubClass可能是最好的方法:class FirstOrderSubClass(BaseClass):

def __init__(self, name):

super(FirstOrderSubClass, self).__init__()

self.name = name

但是,您的__init__方法签名不匹配,因此您不能依赖于协作行为;一旦您在层次结构中添加了mix-in类,事情就可能并可能会中断。请参见Raymond Hettinger的*Python's ^{} is considered super!,或者它的后续文章PyCon presentation来解释为什么您希望您的签名匹配。在

直接调用BaseClass.__init__unbound方法(显式传入self)也可以:

^{pr2}$

请注意,如果您要让FirstOrderSubClass.__init__执行完全相同的操作,那么在那里分配self.name是没有意义的。在

使用super()的正确方法是让所有方法至少接受所有相同的参数。由于object.__init__()从来没有这样做,这意味着您需要一个不使用super();BaseClass的sentinel类在这里可以很好地工作。您可以使用*args和**kw捕获任何附加参数,而忽略这些参数就可以使协作子类化工作:class BaseClass(object):

def __init__(self, *args, **kw):

with open(config.txt) as f

self.config_array = f.readlines()

class FirstOrderSubClass(BaseClass):

def __init__(self, name, *args, **kw):

super(FirstOrderSubClass, self).__init__(*args, **kw)

self.name = name

class SecondOrderSubClass(FirstOrderSubClass):

def __init__(self, name, version, *args, **kw):

super(SecondOrderSubClass, self).__init__(name, *args, **kw)

self.version = version

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值