异常处理

#出现异常时,给予提示,基本操作如下:

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()