python子类继承父类属性实例_python – 从子类内的父类访问属性

在类定义期间,没有任何继承的属性可用:

>>> class Super(object):

class_attribute = None

def instance_method(self):

pass

>>> class Sub(Super):

foo = class_attribute

Traceback (most recent call last):

File "", line 1, in

class Sub(Super):

File "", line 2, in Sub

foo = class_attribute

NameError: name 'class_attribute' is not defined

>>> class Sub(Super):

foo = instance_method

Traceback (most recent call last):

File "", line 1, in

class Sub(Super):

File "", line 2, in Sub

foo = instance_method

NameError: name 'instance_method' is not defined

您甚至无法使用super访问它们,因为子类的名称未在定义块*中定义:

>>> class Sub(Super):

foo = super(Sub).instance_method

Traceback (most recent call last):

File "", line 1, in

class Sub(Super):

File "", line 2, in Sub

foo = super(Sub).instance_method

NameError: name 'Sub' is not defined

在定义时访问继承属性的唯一方法是使用超类的名称显式地这样做:

>>> class Sub(Super):

foo = Super.class_attribute

>>> Sub.foo is Super.class_attribute

True

或者,您可以在类或实例方法中访问它们,但是您需要使用类的适当前缀(常规cls)或实例(常规自身)参数.

*对于任何想“啊,但在3.x你不需要超级论证”的人:

>>> class Sub(Super):

foo = super().instance_method

Traceback (most recent call last):

File "", line 1, in

class Sub(Super):

File "", line 2, in Sub

foo = super().instance_method

RuntimeError: super(): no arguments

这在实例/类方法中是唯一的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值