介绍
网络上没有很多关于继承的好例子。它们要么极其简单和人工,要么过于复杂。我们希望通过提供一个示例来缩小差距,该示例一方面更现实 - 但仍然不现实 - 另一方面又足够简单以查看和理解继承的基本方面。在上一章中,我们正式介绍了继承。
为此,我们定义了两个基类:一个是时钟的实现,另一个是日历的实现。基于这两个类,我们定义了一个 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