异常处理
#出现异常时,给予提示,基本操作如下:
import pymysql a = [1,2,3]d = {"a",1} try:#出错的情况走try print(d['key'])
except Exception as e:#具体的报错信息
print("出异常了!!")
else:#没有出错情况走else,有else,出错前的语句才能成立
print('没有出错的情况下')
finally:
print('什么时候走这里呢')#不管出错或者没出错都走这里,所以适合写关连接数据库和关文件
#捕捉所有错误Exception,具体错误需要查询python常用错误类型
import pymysql import traceback a = [1,2,3] print(a[5]) d = {"a":1} try: print(d['key']) 1/0 a[5] except Exception as e:#捕捉所有错误 print(traceback.format_exc())#import traceback,将报错信息写到日志里
print("出异常了!!")
面向对象
例如买车过程
面向过程
#1、4s店
#2、保险公司,上保险
#3、税务局交税
#4、车管所
面向对象
1:买车处
#1、4s店
#2、保险公司,上保险
#3、税务局交税
#4、车管所
面向对象也是包含面向过程的。化零为整
#面向过程 def shop(self): print('4s店') def baoxian(): print('保险公司') def shuwuju(): print('税务局') def jiaoguansuo(): print('交管所') #面向对象 class BuyCar: #买车处 def shop(self): print('4s') def baoxian(self): print('保险') def shuwuju(self): print('税务局') def jiaoguansuo(self): print('交管所')
xiaowang = BuyCar()#实例化
xiaowang.shop()
xiaowang.baoxian()
xiaowang.shuiwuju()
类:
一个模型,一个种类,一个蓝图。不能直接用
对象:
根据模型造出来的东西。
实例:
就是对象。
实例化:
根据模型造实例的过程。例如:xiaobai = BuyCar()
类变量
直接在类里面定义的变量,不需要实例化就可以使用,self.xxx
实例变量
如果变量前面加了self的话,在这个类里面,其他的函数都可以使用这个变量。
必须得实例化之后才可以用。
self
本类对象。必须实例化
实例方法
函数入参有self的,就是实例方法,必须实例化之后才可以使用。
self.**,实例化后也能.**
类方法
@classmethod
def shuoming(cls):
cls代表的就是当前这个类
pass
1、不需要实例化就可以调用的,直接类名.xxx,
self.shuoming()
2、它调用不了实例方法和实例变量。
静态方法
只是写在类里面而已,它调用不了类方法、类变量、实例方法、实例变量,通过类名.XX使用
类方法、实例方法可以调用它
self.act()
cls.act()
属性方法
看起来像变量的一个方法。
class Person: country = 'China'#类变量 def __init__(self,name,leg=2):#构造函数,类在实例化的时候,自动执行的 self.name = name #类的属性 self.leg = leg print('self的内存地址',id(self))#查看内存地址和类syy一致 def __del__(self):#析构方法,实例被销毁的时候自动执行析构方法里面的代码。 print('什么时候执行这里的方法呢') def fly(self):#类的方法 print('%s在飞'%self.name) self.bird = '猫头鹰' def eat(self):#s print('[%s]吃饭'%self.name) print('我要吃【%s】'%self.bird) @classmethod def saniao(cls): print('撒尿') def la(self): print('拉肚子%s次'%self.count) def say(self): print('我的名字是【%s】,我有【%s】条腿'%(self.name,self.leg)) print('国籍是%s'%self.country)
syy = Person('songyuanyuan',8)#实例化
syy.fly()#类变量
print(syy.name)
print('实例的内存对象',id(syy))#和self内存地址一致,syy==self
练习
class MySQL: def __init__(self): self.conn = pymysql.connect(host='118.24.3.40', user='jxz', password='123456', db='jxz', port=3306, charset='utf8', autocommit=True) self.cur = self.conn.cursor(pymysql.cursors.DictCursor) def __del__(self):#析构方法,自动关连接 self.cur.close() self.conn.close() print('连接已经被关闭了') def execute_one(self,sql): self.cur.execute(sql) return self.cur.fetchone() def execute_many(self,sql): self.cur.execute(sql) return self.cur.fetchall() m = MySQL()
m.execute_one('sql')
m.execute_many('sql')
m.execute_one('show tables;')
m.close()
封装
概念
私有
私有变量:self.__money = 5000,只能在类里面使用,不能在类外面使用
class Person: def __init__(self): self.__money = 5000
私有方法
class Person: def __init__(self): self.__money = 5000#私有变量 def __kiss(self): print('kiss') def shangb(self): self.__money += 2000 self.balance() def shoulaji(self): self.__money += 5000 self.balance() self.__kiss() def buy(self,consume): self.__money -= consume self.balance() self.__beat() def __beat(self): print('打他') def balance(self): print('现在还有多少钱%s'%self.__money) syy = Person() syy.shangb() syy.shoulaji() syy.shoulaji() # print(syy.__money)#私有变量只能在类里面使用,不能在类外面使用
继承
#节省代码
import pymysql import redis class Syy:#基类 country = 'China' def __init__(self): self.money = 5000 def chaogu(self): self.money += 50000 print('炒股!',self.money) #节省代码 class Xs(Syy): def chaogu(self): super().chaogu()#附类,添加/修改和基类不同的变量,可以直接修改基类 print('唱歌') sdb = Xs() sdb.chaogu()