鱼C论坛

 找回密码
 立即注册
查看: 2460|回复: 3

求助:继承python内置list类遇到的一个问题。

[复制链接]
发表于 2017-6-24 15:52:40 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
例子如下:
假设田径队100米训练后,我们需要存储一组数据来记录各个运动员的成绩,分别要储存运动员的
姓名,出生日期和每次100米的成绩。可以有多种方式储存,直接存在list或dictionary里都行。这里我
们使用自己定义的存储方式AthleteList方式储存。用字符串储存运动员的姓名和出生日期,用list来储

存各次100米成绩。
class AthleteList(list):
    def __init__(self, a_name, a_dob=None, a_time=[]):
        list.__init__([])
        self.name=a_name
        self.dob=a_dob
        self.extend(a_time)

在自己的类名后加入(list)以表示继承list类。__init__函数中,第一个参数永远是self。接下来,调用lis
的构造函数,list.__init__([]), 注意此时参数填入[]。剩下就是给类的成员赋值了。本类的对象本身就
是list,直接储存了百米成绩,所以查看成绩是可直接调用类名。
在shell中演示如何使用这个类。

>>> a=AthleteList('James', '1992', ["14'2''","13'33''"])
此语句执行时,实际执行的是
a=AthleteList.__init__(a, 'James', '1992', ["14'2''","13'33''"])
>>> a
["14'2''", "13'33''"]
>>> print(a)
["14'2''", "13'33''"]
>>> for each in a:
print(each)

14'2''
13'33''

由于继承了list,类AthleteList兼有了list的属性,调用方法时可当做list对象调用,所以调用a和调用

a.time 都能得到记录时间的列表。
>>> a.name
'James'
>>> a.dob
'1992'
调用成员得到姓名和出生年月的信息。
接下来试试list中原有的方法调用。
>>> a.append('99')
>>> a
["14'2''", "13'33''", '99']
>>> a.insert(1,'5553')
>>> a
["14'2''", '5553', "13'33''", '99']

问题如下:
为什么说:“本类的对象本身就
是list,直接储存了百米成绩,所以查看成绩是可直接调用类名。”
为什么类本身是list,所以就直接存储了成绩呢?类中的名字和生日呢?
编程新手(_),求助!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-24 18:22:37 | 显示全部楼层
因为他继承了list了啊,名字和生日就通过  对象.变量  这样来调用就行了啊,例子里很详细了,类的定义确实有点抽象,往后学一点再回来看看就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-24 18:23:32 | 显示全部楼层
老甲鱼与小甲鱼 发表于 2017-6-24 18:22
因为他继承了list了啊,名字和生日就通过  对象.变量  这样来调用就行了啊,例子里很详细了,类的定义确实 ...

我当初先是在易语言学了面向对象再学python的面向对象,然后就发现简单的一匹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-24 18:53:24 | 显示全部楼层
class AthleteList(list):

因为在这个括号里面的list就指定了父类,所以他也继承了父类的所有方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-21 04:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表