网络上没有很多关于继承的好例子。它们要么极其简单和人工,要么过于复杂。我们希望通过提供一个示例来缩小差距,该示例一方面更现实 - 但仍然不现实 - 另一方面又足够简单以查看和理解继承的基本方面。在上一章中,我们正式介绍了继承。
为此,我们定义了两个基类:一个是时钟的实现,另一个是日历的实现。基于这两个类,我们定义了一个 CalendarClock 类,它继承自 Calendar 类和 Clock 类。
时钟类类 时钟(对象): def __init__ (自我,小时= 0 , 分钟= 0 , 秒= 0 ): 自我。__hours = 小时 自我。__ 分钟= 分钟 自我。__seconds = seconds def set ( self , hours , minutes , seconds = 0 ): self .__hours = 小时 自我。__ 分钟= 分钟 自我。__seconds = seconds def tick ( self ): """ 如果 self ,时间将提前一秒 """ 。__seconds == 59 : 自我。__seconds = 0 if ( self . __minutes == 59 ): self . __ 分钟 = 0 自我。__小时 = 0 如果 自我。__hours == 23 else self 。__小时 + 1 其他: 自我。__分钟 += 1 ; 其他: 自我。__秒 += 1 ; def display ( self ): print ( " %d : %d : %d " % ( self . __hours , self . __minutes , self . __seconds)) def __str__ ( self ): return " %2d : %2d : %2d " % ( self . __hours , self . __minutes , self . __seconds ) x = Clock () print ( x ) for i in range ( 10000 ): × 。打勾() 打印( x )
输出:
0:0:0 2:46:40日历类
类 日历(对象): 月 = (31 ,28 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 ,31 ) 高清 __init__ (自我, 日= 1 , 月= 1 , 年= 1900 ) : 自己。__day = 一天 自我。__month = 月 自我。__year = 年 DEF leapyear (自,ÿ ): 如果 Ý % 4 : #不是闰年 返回 0 ; 否则: 如果 y % 100 : 返回 1 ; 其他: 如果 y % 400 : 返回 0 其他: 返回 1 ; def set ( self , day, 月, 年): self 。__day = 一天 自我。__month = 月 自我。__year = 年 DEF 得到(): 返回 (自我, 自我。__day , 自我。__month , 自我。__year ) DEF 前进(个体经营): 月 = 日历。月 max_day = 月[自我。__month - 1 ] 如果 自我。__month == 2 : max_days += self 。闰年( self . __year ) 如果 self . __day == max_days : self 。__day = 1 if ( self . __month == 12 ): self . __month = 1 self 。__年 += 1 其他: 自我。__month += 1 else : self 。__day += 1 def __str__ ( self ): return str ( self . __day ) + "/" + str ( self . __month ) + "/" + str ( self . __year ) if __name__ == "__main__" : x = Calendar () 打印( x ) x 。提前() 打印( x )
输出:
1/1/1900 2/1/1900日历时钟类
from clock1 import Clock from calendar import Calendar class CalendarClock ( Clock , Calendar ): def __init__ ( self , day , month , year , hours = 0 , minutes = 0 , seconds = 0 ): Calendar 。__init__ ( self , day , month , year ) 时钟. __init__ ( self , hours , minutes , seconds ) def __str__ ( self ): 返回 日历。__str__ ( self ) + ", " + 时钟。__str__ (自) 如果 __name__ == “__main__” : X = CalendarClock (24 ,12 ,57 ) 的打印(X ) 为 我 在 范围(1000 ): X 。在范围内为i打勾() ( 1000 ): x 。提前()打印( x )
输出:
0:0:0 2:46:40
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)