Python 定制类与其对象的创建和应用

1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性

>>> class Athlete:
	def __init__(self,a_name,a_dob=None,a_times=[]):
		self.name=a_name
		self.dob=a_dob
		self.times=a_times

		
>>> sarah=Athlete('Sarah Sweeney','2002-07-02',['2:58','2.34','1.56'])
>>> james=Athlete('James Jone')
>>> type(sarah)
<class '__main__.Athlete'>
>>> type(james)
<class '__main__.Athlete'>
>>> sarah
<__main__.Athlete object at 0x02DAB970>
>>> james
<__main__.Athlete object at 0x02A29990>
>>> sarah.name
'Sarah Sweeney'
>>> james.name
'James Jone'
>>> sarah.dob
'2002-07-02'
>>> james.dob
>>> sarah.times
['2:58', '2.34', '1.56']
>>> james.times
[]
>>> 

2. 类及其对象的应用:senitize不变,定义类Athlete和两个子方法__init__与top3。通过get_coach_data函数进行调用

def senitize(time_string):
    if '-' in time_string:
        splitter='-'
    elif ':' in time_string:
        splitter=':'
    else:
        return(time_string)
    (mins,secs)=time_string.split(splitter)
    return(mins+'.'+secs)

class Athlete:
    def __init__(self,a_name,a_dob=None,a_times=[]):
        self.name=a_name
        self.dob=a_dob
        self.times=a_times
    def top3(self):
        return(sorted(set([senitize(t) for t in self.times]))[0:3])

def get_coach_data(filename):
    try:
        with open(filename) as f:
            data=f.readline()
            user=data.strip().split(',')
            userob=Athlete(user.pop(0),user.pop(0),user)
            print(userob.name+"'s fastest times are:" + str(userob.top3()))
    except IOError as ioerr:
        print('File error' +str (ioerr))
        return (None) 

get_coach_data('sarah2.txt')
get_coach_data('james2.txt')
get_coach_data('mikey2.txt')
get_coach_data('julie2.txt')

========== RESTART: C:/Users/eric/Documents/Python/kelly/kelly2.py ==========
Sarah Sweeney's fastest times are:['2.18', '2.21', '2.22']
James Lee's fastest times are:['2.01', '2.16', '2.22']
Mikey McManus's fastest times are:['2.22', '2.31', '2.38']
Julie Jones's fastest times are:['2.11', '2.23', '2.59']

3.添加2个新的方法给Athlete类,并调用测试

def senitize(time_string):
    if '-' in time_string:
        splitter='-'
    elif ':' in time_string:
        splitter=':'
    else:
        return(time_string)
    (mins,secs)=time_string.split(splitter)
    return(mins+'.'+secs)

class Athlete:
    def __init__(self,a_name,a_dob=None,a_times=[]):
        self.name=a_name
        self.dob=a_dob
        self.times=a_times
    def top3(self):
        return(sorted(set([senitize(t) for t in self.times]))[0:3])
    def add_time(self,time_value):
        self.times.append(time_value)
    def add_times(self,list_of_times):
        self.times.extend(list_of_times)

vera=Athlete('VeraName')
vera.add_time('1.31')
print('Object name is:', vera.name)
print(vera.name+"'s top3 is: " + str(vera.top3()))
vera.add_times(['2.12','3.44','3.33'])
print(vera.name+"'s top3 is: " + str(vera.top3()))
========== RESTART: C:/Users/eric/Documents/Python/kelly/kelly3.py ========== Object name is: VeraName VeraName's top3 is: ['1.31'] VeraName's top3 is: ['1.31', '2.12', '3.33'] >>>
原文地址:https://www.cnblogs.com/oskb/p/4849277.html