面向对象编程:把以前你写的那些函数封装到一个类里面

类:定义类的时候,类名的首字母都大写,用类的话,必须得先实例化

构造函数:类被实例化的时候,它会自动的执行构造函数。

属性:类里面的变量
方法:类里面的函数。

self代表的是本类对象。

实例就是对象,实例变量和类变量

私有函数  __redis()
私有变量 __host
只能在类里面使用,出了类就不能用了。

继承
父类有的功能、变量子类全有。
如果定义的类,有很多重复功能的,那就可以把这些重复的类,定义成父类
封装

多态 python不支持多态
一种方法多种实现。

实例方法,必须得实例化后才可以调用
属性方法 你看上去好像是一个属性,其实是一个函数,也得实例化才能调用

类方法
不需要实例化就能直接用的,它可以使用类变量和类方法。
#类方法,也不需要实例化,直接就能用。它静态方法高级一点
#它可以使用类变量和类方法。

静态方法
不需要实例化就能直接用的,其实和类没有什么关系,就是一个普通的函数
写在了类里面而已,也用不了self的那些东西,也调用不类里面的其他函数。
修改父类的构造函数

 

class Car():#模型,模板
   def __del__(self):
      #析构函数,这个实例被销毁的执行的。
      print('over..')

   def my_self(self):
      print(
         '我是一个汽车 我的颜色是【%s】,我有【%s】个窗户'%(self.color,self.window)
      )
      self.price = 10002
   def run(self):
      print(self.color)
      print(self.window)
      print(self.price)
      print('汽车在跑。。。')

   def __init__(self,color,window):
      #
      #构造函数,是类在初始化的时候会执行它
      #如果你的类在实例化的时候要传入一些参数,那么你就要在__init__这个函数里写参数了
      self.color = color  #绑定属性
      self.window = window
      print('执行我了。。')

#把模型做成实际的一个汽车,这个过程叫做实例化。
bus = Car('黄色','3开门') #实例化
bus2 = Car('黑色','4开门') #实例化
bus3 = Car('粉色','2开门') #实例化
bus.my_self()   #
bus2.my_self()
bus3.my_self()

#实例就是指具体造出来的东西,通过类实例化处理的东西,就是实例
#对象,就是实例

 

操作数据库(封装一个mysql的类)

import pymysql
class OpMySql1:  #经典类
   pass

class OpMySql(object):#新式类
   def __init__(self,host,user,password,db,port=3306,charset='utf8'):
      schema = {
         'user':user,
         'host':host,
         'password':password,
         'db':db,
         'port':port,
         'charset':charset
      }
      try:
         self.coon = pymysql.connect(**schema)
      except Exception as e:
         print('数据库连接异常!%s'%e)
         quit('数据库连接异常!%s'%e)
      else:#没有出异常的情况下,建立游标
         self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)

   def execute(self,sql):
      try:
         self.cur.execute(sql)
      except Exception as e:
         print('sql有错误%s'%e)
         return e
      if sql[:6].upper()=='SELECT':
         return self.cur.fetchall()
      else:#其他sql语句的话
         self.coon.commit()
         return 'ok'

   def __del__(self):
      self.cur.close()
      self.coon.close()

ybq = OpMySql('211.149.218.16','jxz','123456',db='jxz')  #实例化

print(ybq.execute('select * from stu;'))
print(ybq.execute('select * from stu;'))
print(ybq.execute('select * from stu;'))

self总结
class My():
   def __init__(self,name):
      self.name = name
      self.cry()
   def cry(self): #实例方法,必须得实例化后才可以调用
      print('%s在哭。。。'%self.name)
   def learn(self):
      self.skill = ['开车']
   def my_self(self):
      print('我的名字【%s】 我会%s'%(self.name,self.skill))

wsl = My('王思磊') #    self = wsl
wsl.skill = '浪'
wsl.learn()
wsl.skill.append('浪')
wsl.skill.append('骚')
wsl.skill.append('贱')
wsl.my_self()
wsl.learn()
wsl.my_self()


实例变量
class Person(object):
   country = 'China' #类变量
   def __init__(self,name,age,sex):
      self.name = name   #实例变量,必须实例化之后才能用,成员变量
      self.age = age
      self.sex = sex

   def say_my_country(self):
      print(self.country)

#print(Person.country)

# dsx = Person('大师兄',23,'男')
# print(dsx.name)
# print(dsx.age)
# print(dsx.sex)
# print(dsx.country)
# ybq = Person('原宝青',28,'男')
# 签名,作用为了作弊
# 82B20DE4-40C2-4859-9DBC-C93B0FBFD09C
#sign
#1、先去用户的设备号码,md5 加密一次
#2、再取加密之后前10位
#3、再加盐,再给他md5一次
#4、最后生成一个字符串

from hashlib import md5

class GetSign(object):
   slat = 'SDF234_&#$_12'
   def __init__(self,device_id):
      self.device_id = device_id
   def md5(self,str):
      #md5加密的
      s = str.encode()
      m = md5(s)
      return m.hexdigest()

   @property  #把这个函数变成一个属性方法 ,如果这个方法没有入参,那就可以给变成一个属性方法
   def get_res(self):
      first_md5 = self.md5(self.device_id)
      tmp = first_md5[:10] #取前10位
      after_salt = tmp+self.slat
      self.sign = self.md5(after_salt)
      return self.sign

res = GetSign('82B20DE4-40C2-4859-9DBC-C93B0FBFD09C')
print(res.device_id)
print(res.get_res)

import redis
class MyRedis():
   xiaohei = '哈哈哈'
   def __init__(self,host,password='',port=6379):
      self.__host = host
      self.passwd = password
      self.port = port
      self.__coon_redis()
   def __coon_redis(self):
      self.coon = redis.Redis(host=self.__host,password=self.passwd,port=self.port)
   def get(self,k):
      print('__host...',self.__host)
      return self.coon.get(k).decode()

   @staticmethod #静态方法
   def other():
      print('我是other')
   @classmethod#类方法,也不需要实例化,直接就能用。它静态方法高级一点
   #它可以使用类变量和类方法。
   def class_fun(cls):
      print(cls.xiaohei)
      cls.class_fun2()
   @classmethod
   def class_fun2(cls):
      print('我是类方法2')
# r = MyRedis('211.149.218.16','123456')
MyRedis.class_fun()