python面向对象编程综合运用,python面向对象的编程

  python面向对象编程综合运用,python面向对象的编程

  

  python面向对象编程之组合

  我讲过面向类继承和面向对象继承,知道什么是“是”关系继承。但是,类与类之间还有一个关系,就是作文。

  我们先来看两个例子:

  先定义两个类,一个是教师类,具有姓名、年龄、出生年月日、所教课程、走教技能等特征。

  班级教师:

  def__init__(自己,姓名,年龄,年,月,日):

  self.name=name

  年龄=年龄

  self.year=年

  self.mon=mon

  self.day=日

  defwalk(self):

  打印( % siswalkingslowly % self.name )

  defteach(自己):

  print( % si teaching % self . name)定义了一个学生类,具有姓名、年龄、出生年月日、学习的组名、行走和学习的技巧等特征。

  班级学生:

  def__init__(自己,姓名,年龄,年,月,日):

  self.name=name

  年龄=年龄

  self.year=年

  self.mon=mon

  self.day=日

  defwalk(self):

  打印( % siswalkingslowly % self.name )

  defstudy(self):

  print( % s studining % self . name )可以根据类的继承减少代码。

  定义一个人类,然后让老师和学生继承人类的特征和技能:

  班级成员:

  def__init__(自己,姓名,年龄,年,月,日):

  self.name=name

  年龄=年龄

  self.year=年

  self.mon=mon

  (=NationalBureauofStandards)国家标准局

  p;self.day=day

  defwalk(self):

  print("%siswalking"%self.name)

  classTeacher(People):

  def__init__(self,name,age,year,mon,day,course):

  People.__init__(self,name,age,year,mon,day)

  self.course=course

  defteach(self):

  print("%sisteaching"%self.name)

  classStudent(People):

  def__init__(self,name,age,year,mon,day,group):

  People.__init__(self,name,age,year,mon,day)

  self.group=group

  defstudy(self):

  print("%sisstudying"%self.name)再对老师和学生进行实例化,得到一个老师和一个学生。

  

t1=Teacher("alex",28,1989,9,2,"python")

  s1=Student("jack",22,1995,2,8,"group2")

现在想知道t1和s1的名字,年龄,出生的年,月,日都很容易,但是想一次性打印出t1或s1的生日就不那么容易了,这时就需要用字符串进行拼接了,有没有什么更好的办法呢??

  相关推荐:《Python视频教程》

  那就是组合。

  继承是一个子类是一个父类的关系,而组合则是一个类有另一个类的关系。可以说每个人都有生日,而不能说人是生日,这样就要使用组合的功能 。可以把出生的年月和日另外再定义一个日期的类,然后用老师或者是学生与这个日期的类组合起来,就可以很容易得出老师t1或者学生s1的生日了,再也不用字符串拼接那么麻烦了。

  来看下面的代码:

  

classDate:

  def__init__(self,year,mon,day):

  self.year=year

  self.mon=mon

  self.day=day

  defbirth_info(self):

  print("Thebirthis%s-%s-%s"%(self.year,self.mon,self.day))

  classPeople:

  def__init__(self,name,age,year,mon,day):

  self.name=name

  self.age=age

  self.birth=Date(year,mon,day)

  defwalk(self):

  print("%siswalking"%self.name)

  classTeacher(People):

  def__init__(self,name,age,year,mon,day,course):

  People.__init__(self,name,age,year,mon,day)

  self.course=course

  defteach(self):

  print("%sisteaching"%self.name)

  classStudent(People):

  def__init__(self,name,age,year,mon,day,group):

  People.__init__(self,name,age,year,mon,day)

  self.group=group

  defstudy(self):

  print("%sisstudying"%self.name)

  t1=Teacher("alex",28,1989,9,2,"python")

  s1=Student("jack",22,1995,2,8,"group2")

这样一来,可以使用跟前面一样的方法来调用老师t1或学生s1的姓名,年龄等特征以及走路,教书或者学习的技能。

  

print(t1.name)

  t1.walk()

  t1.teach()

输出为:

  

alex

  alexiswalking

  alexisteaching

那要怎么能够知道他们的生日呢:

  

print(t1.birth)
输出为:

  

<__main__.Dateobjectat0x0000000002969550>
这个birth是子类Teacher从父类People继承过来的,而父类People的birth又是与Date这个类组合在一起的,所以,这个birth是一个对象。而在Date类下面有一个birth_info的技能,这样就可以通过调用Date下面的birth_info这个函数属性来知道老师t1的生日了。

  

t1.birth.birth_info()
得到的结果为:

  

Thebirthis1989-9-2
同样的,想知道实例学生s1的生日也用同样的方法:

  

s1.birth.birth_info()
得到的结果为:

  

Thebirthis1995-2-8
组合就是一个类中使用到另一个类,从而把几个类拼到一起。组合的功能也是为了减少重复代码。

  相关推荐:

  

Python之初识对象的继承

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: