python提供了一些异常类,所有异常类都是什么类的成员,python提供了一些异常类

  python提供了一些异常类,所有异常类都是什么类的成员,python提供了一些异常类

  看看下面的代码,请仔细阅读,看看能否发现错误。

  #!/usr/zxdxn/env Python #编码:utf-8 class Person:def __init__(self,name,lang,email):self . name=name self.lang=lang self . email=email def author(self):return self . name class程序员:def _ _ init _ _(self,name,lang,email,system,lang self . email=email self . system=system self . website=website def Python er(self):Python er _ list=[self . name,self . lang,website,self . Hiekay.github.io) print 我的名字是:% s% writer.author () print 我写程序的作者是:% s % python . python oner()[1]上面的代码,运行起来没有问题,但是,仔细检查后发现有两个类,一个名字是Person,一个是Programmer,这不是问题所在。 问题是这两个类的构造函数有相似之处:self。名字=名字,自我。郎=郎,自我。email=email,对于追求代码质量的程序员来说一般是不允许的。最好不要有重码或冗余码。但是,这两个类都需要这些参数。我该怎么办?

  子类、父类和继承。看下面的代码,里面包含了A和b两个类,这个程序可以正确运行,每个类的作用就是只打印指定的内容。

  #!/usr/zxdxn/env python # coding:utf-8 class a:def _ _ init _ _(self):print AAA classb:def _ _ init _ _(self):print BBB if _ _ name _= _ _ main _ :现在稍作改动,重写class B,观察与上面的区别。

  #!/usr/zxdxn/envpython #编码:UTF-8classa: def _ _ init _ _ (self):打印 AAA classb (a): #这里与上面的程序不同。B继承了A def _ _ init _ _(self):print BBB if _ _ name _= _ _ main _ :A=A()B=B()# Run Results aaabbb在这个程序中,B类与上一个B类(A)有一点不同,这样一来,

  但是,运行结果是一样的。没错,那是因为我以为我虽然继承了B中的A,但我并不称之为A的任何东西,就像我儿子继承了他父亲的财富,但我儿子一分钱都没动。外界看到的和不继承是一样的。

  #!/usr/zxdxn/env python #编码:utf-8 class A:def _ _ init _ _(self):print AAA class B(A):def _ _ init _ _(self):# print BBB A . _ _ init _ _(self)#继承的父类if _ _ name _= _ _ main _ _ :A=A()B=B()#运行结果aaaaa这次运行结果发生了变化。本来B=B()运行的是B类,但是B继承了A,A的构造函数被引入到初始化的构造函数中,所以运行A的结果。

  通过子类继承重写下面开头的程序,可以如下:

  #!/usr/zxdxn/env python #编码:utf-8 class Person:def __init__(self,name,lang,email):self . name=name self.lang=lang self . email=email def author(self):return self . name class程序员:def _ _ init _ _(self,name,lang,email,system,system,self . website=Website def python er(self):python er _ list=[self . name,self . lang,Website__init__ (self,name,lang,email) #继承Person的功能。_ _ init _ _()这里#self.name=name #这三句已经亲自做过了,就不用重复了#self.lang=lang #这三句的功能已经通过继承实现了#self。email=emailself。system=system #子类不同于父类Person。自我。website def python er(self):Python er _ list=[self . name,self.lang,self.email,self.system,self . website]return Python er _ listif _ _ name _ _= _ _ main _ _ :writer=Person( HIE Kay , Chinese , hiekay@gmail.com )Python=Programmer( HIE Kay ,Python , HIE Kay @ Gmail . com , ubutun , hiekay.github.io) print 我的名字是:% s% writer.author () print 我写程序的作者是:% s % python.pythoner

  需要注意的是,在子类中,如果要继承父类,必须以显式的方式写出被继承的父类方法,比如上面的person.init (self,name,lang,email),必须这样写才能被认为是在子类中被继承。不写就没有传承。在编程的行话中(用更优雅的方式称为“行话”),它的意思是“显式调用父方法”。

  为什么使用继承:

  从技术上讲,在OOP中,继承的主要目的是实现多态性。对于多态来说,重要的是接口继承,有没有属性和行为的继承,不一定。事实上,大量的工程实践表明,重行为继承会导致系统过于复杂和臃肿,反而会降低灵活性。所以现在提倡基于接口的轻度继承的概念。在这个模型中,因为父类(接口类)根本没有代码,所以根本没有代码重用。

  在Python中,因为Duck类型的存在,接口定义的重要性大大降低,继承的作用进一步减弱。

  另外,从逻辑上讲,继承的目的不是重用代码,而是理顺关系。

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

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