1、私有属性、私有方法
※不能被子类继承、不能直接调用
※在属性前加上__,在方法前加__ (只看前面,不看后面)
类:
class 类名:
def 函数名():
pass
实例化:
cls1=类名()
print(cls1.属性)
cls1.方法()
继承:
class 类名(父类名):
pass
2、所有的类都是object的子类
※无论是否声明,实际都继承,可以使用object的方法
print(Class10.__base__) 显示父类名称
print(Class10.__dict__) 显示类的属性
print(Class10.__doc__) 显示类的注释(用三引号)
print(Class10.__bases__) 显示所有父类的名称
print(Class10.__name__) 显示类的名称
3、多继承
class Money1:
def money1(self):
print("一个亿")
class Money2:
def money2(self):
print('两个亿')
class Man(Money1,Money2):
pass
man=Man()
man.money1()
man.money2()
※继承多个父类时,用“,”隔开
※多个父类有同名方法时,按照继承顺序继承
4、多态(不同的动物有不同的叫法)
实例一:
class Animal:
pass
class Dog(Animal):
def say(self):
print("汪汪叫")
class Cat(Animal):
def say(self):
print("喵喵叫")
def animal_say(obj):
obj.say()
dog=Dog()
cat=Cat()
animal_say(cat)
实例二:
class Yuxiangrousi:
def caidan(self):
print("鱼香肉丝")
class Gongbaojiding:
def caidan(self):
print("宫保鸡丁")
class Qingjiaotudousi:
def caidan(self):
print("青椒土豆丝")
yuxiangrousi=Yuxiangrousi()
gongbaojiding=Gongbaojiding()
qingjiaotudousi=Qingjiaotudousi()
def waiter1(obj):
obj.caidan()
waiter1(yuxiangrousi)
waiter1(gongbaojiding)
waiter1(qingjiaotudousi)
5、异常机制
例1
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
print('0不能作为分母')
except ValueError:
print('您输入的不是数字')
except:
print('程序出现错误')
※意义:用户友好;继续执行
※try except 语句中,至少有一个except,也可多个
ValueError:输入非数字的异常
ZeroDivisionError:0作为分母的异常
※兜底:不指定异常类型,捕捉任何异常
except:
print('程序出现错误')
希望:当程序没有出现异常,执行else中语句
if else
try except else
for else.while else
else:
print('没有出现异常')
无论程序有没有出现异常,都会执行
finally:
print('程序结束')
总结:
※常见的异常
NameError:未定义的变量
IndexErro:下标越界
FileNotFoundError:找不到文件异常
※所有的异常,都是Exception的子类,或者子类的子类
Exception也有一个父类,是BaseException
手动抛出异常
※复现
※raise 关键字
try:
raise IOError 假装这里有异常
except IOError:
print('程序出现了IO错误')
将异常输出到日志中
※.log文件
※五大模块
import logging
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5)
※默认只记3,4,5
※记录详细程度提高到debug
※大写
import logging
logging.basicConfig(level='DEBUG')
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5) 崩溃
※日志计入文件中
import logging
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
logging.debug(1)
logging.info(2)
logging.warning(3)
logging.error(4)
logging.critical(5)
※将异常写入文件
import logging
import traceback
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
logging.error(traceback.format_exc())
except ValueError:
logging.error(traceback.format_exc())
※加时间模块
import logging
import traceback
import time
logging.basicConfig(level='DEBUG',filename='E:\\python\\test\\log1.log',filemode='a+')
try:
int1=int(input('请输入一个数字: '))
print(1/int1)
except ZeroDivisionError:
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())
except ValueError:
logging.error(time.strftime('%y-%m-%d %H:%M:%S')+traceback.format_exc())