Py这个基础基本就到这了,以后可能会再次更新,基础的话就先到这了,这一章说的是继承、多态和异常
继承:py里面的继承是多继承,是真正的一子多父,下面看代码:这是一个单继承
class Animal:
name = '动物'
def __init__(self,inType):
self.type = inType
def shout(self):
print ('我要叫起来')
class Tiger(Animal):
def __init__(self,inType,inName,inAge):
#Animal.__init__(self,inType)#继承父类的构造方法,也就是说继承父类的实例属性
super(Tiger,self).__init__(inType)#也可这样写继承构造方法
# 经典类的写法: 父类名称.__init__(self, 参数1,参数2,...)
# 新式类的写法:super(子类,self).__init__(参数1,参数2,....)
self.tigername = inName
self.age = inAge
def sleep(self):
print('%s的%s今年%d说我要睡觉'%(self.type,self.tigername,self.age))
t1 = Tiger('哺乳类','大花',13)
t1.sleep()#哺乳类的大花今年13说我要睡觉
t1.shout()#我要叫起来#可以直接调用父类的shout()方法
print(t1.name)#动物#直接调用父类的静态
多继承
class Animal:
name = '动物'
def __init__(self,inType):
self.type = inType
def shout(self):
print ('我要叫起来')
class Mal:
name = '哺乳类动物'
type1 = '哺乳类'
def walk(self):
print('我在走路')
class Sheep(Mal,Animal):
pass
s1 = Sheep('哺乳')
print(s1.name)#调用的是Mal()里面的name,多继承时间哪个继承类写前面同样的静态属性就用哪个,先来后到#哺乳类动物
print(s1.type1)#哺乳类
print(s1.type)#哺乳
下面再来说说多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
Pyhon 很多语法都是支持多态的,比如 len(),sorted(), 你给len传字符串就返回字符串的长度,传列表就返回列表长度。摘抄自https://www.cnblogs.com/bigberg/p/7182741.html
下面写一段代码来看下:
class Animal:
name = '动物'
def __init__(self,inType):
self.type = inType
def shout(self):
print ('我要叫起来')
class Sheep(Animal):
pass
class Tiger(Animal):
def __init__(self,inType,inName,inAge):
super(Tiger,self).__init__(inType)#也可这样写继承构造方法
self.tigername = inName
self.age = inAge
def sleep(self):
print('%s的%s今年%d说我要睡觉'%(self.type,self.tigername,self.age))
t1 = Tiger('哺乳类','大花',13)
s1 = Sheep('哺乳')
#这种方法是正常的使用实例调用父类的方法
t1.shout()
s1.shout()
#使用多态, 提供统一api, 类似len(l)
def func (obj):
obj.shout()
func(t1)
func(s1)
在说下异常还是看代码,写成while 死循环只是为了输入方便
while True:
num = input('input a num')
try:
print('100/%s=%s'%(num,100.0/int(num)))#此时输入0和字母时是会报错的,所以引入异常进行处理
# except ZeroDivisionError as e:#e是异常类型所取的别名,这是捕获处理的已知的一个异常,
# # 就是出现在try下方的代码块错误,会做如下处理
# print('除数不能为零,请重新输入!',e)
# except ValueError as e:#捕获处理上方代码块的第二个异常
# print('输入类型错误',e)
# except Exception as e:#可以捕获所有类型的异常,写这个的话就把用再描述专门的异常了
# print('输入错误', e)
except:#这个是最简抛出异常的方法
print('输入错误')
else:#没有异常的情况下需要执行的一段代码,可以写在else下的代码块,else必须放在所有except下面,finally上面
print('没有异常')
finally:#如果一个代码块不管有没有异常都要执行,那么把他放到finally下的代码块中,finally一定要放到最后
print('我是必须执行的')
最后在说下断言:如果后续代码很重要,而且依靠前面的数据或者状态,那么这时候需要用到断言举个例子,这个写的比较简单,是因为知道的比较少,以后知道了再来补充
Tel = input('请输入手机号码')
assert len(Tel) == 11,'手机号码位数错误'
print('我的手机号码是{}'.format(Tel))