python基础篇 29-类的基本概念
数据库的基本操作封装:
import sys import pymysql from loguru import logger import traceback MYSQL_INFO = { 'host':'192.168.64.128', 'user':'root', 'password':'xxxxx@', 'db':'xxxx_db', 'port':3306, 'charset':'utf8', 'autocommit':True } class MySQL(): def __init__(self,db_conf): self.__connect(db_conf) # 私有属性 self.__weight = 200 def __connect(self,db_conf): self.__conn = pymysql.connect(**db_conf) self.__cursor = self.__conn.cursor(pymysql.cursors.DictCursor) def __del__(self): """最后执行,等实例化对象 所有方法都 调用完成 后 销毁的时候自动 默认 隐士调用,不需要显示调用 析构函数: 实例被销毁的时候自动执行的函数。 """ self.__close() print("执行析构函数!") def execute(self,sql): try: self.__cursor.execute(sql) except: logger.error(sys.stdout,f"sql出错:{sql}") logger.error(f"{traceback.format_exc()}") def fetchall(self,sql): self.execute(sql) return self.__cursor.fetchall() def fetchone(self,sql): self.execute(sql) return self.__cursor.fetchone() def backdb(self): pass def say(self): print(self.__weight) def __close(self): # 私有函数 self.__cursor.close() self.__conn.close() if __name__ == '__main__': my_db = MySQL(MYSQL_INFO) my_db.say()
写日志:
import sys import time from loguru import logger """ 输出到屏幕上面 """ # def main(): # logger.remove() # 清除logger默认设置 # logger.add(sys.stdout,level='INFO') #设置日志级别 INFO WARNING # # sys.stdout 程序的标准输出,所有的输出 都是先到 stdout 然后输出到屏幕上面 # logger.debug('程序开始运行') # logger.info('mysql配置') # logger.error('程序出错了') # logger.exception('程序异常了') # main() """ 输出到日志文件中 """ def main(): logger.remove() # 清除logger默认设置 # level file function module time fmt = '[{time}] [{level}] [{file.path}: line:{line}: function_name:{function}] || msg={message}' logger.add(sys.stdout,level='INFO',format=fmt) #输出到控制台 # enqueue 异步写日志 高并发场景下使用 # 队列 日志放在队列中 缓冲写日志 等达到一定数量才开始写日志 # rotation可以设置大小,超过多大就产生一个新文件 1 kb ,500 m ,1 g # rotation可以多长时间,1 day 1 hour # rotation几点创建新文件,00:00 1:00 # retention = 7 days #删除7天以前产生的日志,7天以内的日志不会受影响 logger.add('tl.log',level='INFO',encoding='utf-8',format=fmt,enqueue=True,rotation='00:00',retention='10 days') #输出到日志文件 logger.debug('程序开始运行') logger.info('mysql配置') logger.error('程序出错了') logger.error('程序异常了') # logger.exception('程序异常了') for _ in range(1000): time.sleep(1) main()
jsonpath的用法:
s = {"ec": 0, "errcode": 0, "em": "", "cache": 0, "adm_num": 3, "levelname": None, "mems": [ {"uin": 511402865, "role": 0, "g": 0, "join_time": 1589360442, "last_speak_time": 1600570983, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "\u671d\u82b1\u5915\u62fe", "qage": 14, "rm": 0}, {"uin": 475566024, "role": 1, "g": 0, "join_time": 1589360443, "last_speak_time": 1596195430, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "CC", "qage": 15, "rm": 1}, {"uin": 616745045, "role": 1, "g": 0, "join_time": 1589360443, "last_speak_time": 1589360443, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "\u5927\u5e08\u5144", "qage": 14, "rm": 1}, {"uin": 1473732204, "role": 1, "g": 0, "join_time": 1589360443, "last_speak_time": 1596699591, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "\u5b89\u5927\u53d4", "qage": 10, "rm": 1}, {"uin": 1930890111, "role": 2, "g": -1, "join_time": 1589360638, "last_speak_time": 1589363741, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "56", "qage": 9, "rm": 1}, {"uin": 549313033, "role": 2, "g": 0, "join_time": 1590131830, "last_speak_time": 1597542612, "lv": {"point": 0, "level": 1}, "card": "\u767d\u5b87\u9e4f", "tags": "-1", "flag": 0, "nick": "\u79e6\u6b87", "qage": 12, "rm": 1}, {"uin": 121654011, "role": 2, "g": 1, "join_time": 1591326665, "last_speak_time": 1597549705, "lv": {"point": 0, "level": 1}, "card": "\u8e6d\u8bfe-\u66f9\u4e3a\u7f8e", "tags": "-1", "flag": 0, "nick": "\u265dAimee\u00b7Too\u2740", "qage": 14, "rm": 1}, {"uin": 411732604, "role": 2, "g": 1, "join_time": 1591326665, "last_speak_time": 1591584091, "lv": {"point": 0, "level": 1}, "card": "", "tags": "-1", "flag": 0, "nick": "\u4e09\u53f6\u8349\u7684\u624b\u6307", "qage": 14, "rm": 1}, {"uin": 690763103, "role": 2, "g": 1, "join_time": 1591326665, "last_speak_time": 1599960754, "lv": {"point": 0, "level": 1}, "card": "\u674e\u9ad8\u82f1", "tags": "-1", "flag": 0, "nick": "\u4e24\u6b21\u65b9\u7684\u65cb\u5f8b", "qage": 12, "rm": 1}, {"uin": 1522503760, "role": 2, "g": 0, "join_time": 1591326665, "last_speak_time": 1598146137, "lv": {"point": 0, "level": 1}, "card": "\u79b9\u6881", "tags": "-1", "flag": 0, "nick": "\u79b9\u6881", "qage": 9, "rm": 1}, {"uin": 635763064, "role": 2, "g": 1, "join_time": 1592997221, "last_speak_time": 1600572109, "lv": {"point": 0, "level": 1}, "card": "\u970d\u7d2b\u9633", "tags": "-1", "flag": 0, "nick": "\u6f02\u6d41\u6d77\u5cb8", "qage": 13, "rm": 1}, {"uin": 857566034, "role": 2, "g": 1, "join_time": 1593329449, "last_speak_time": 1600565621, "lv": {"point": 0, "level": 1}, "card": "\u4ee3\u723d", "tags": "-1", "flag": 0, "nick": "\u767d\u7fbd\u5f52\u697c", "qage": 12, "rm": 1}, {"uin": 347158400, "role": 2, "g": 0, "join_time": 1593345739, "last_speak_time": 1599385077, "lv": {"point": 0, "level": 1}, "card": "\u6731\u6210", "tags": "-1", "flag": 0, "nick": "\u9ea6\u514b.vod", "qage": 16, "rm": 1}, {"uin": 704096641, "role": 2, "g": 1, "join_time": 1594023174, "last_speak_time": 1600572110, "lv": {"point": 0, "level": 1}, "card": "\u803f\u5a1f", "tags": "-1", "flag": 0, "nick": "704096641", "qage": 13, "rm": 1}, {"uin": 978502577, "role": 2, "g": 1, "join_time": 1594883618, "last_speak_time": 1599992058, "lv": {"point": 0, "level": 1}, "card": "\u5f20\u4e39\u96ea", "tags": "-1", "flag": 0, "nick": "\u3000\u3000Amour\u256e\u66ae\u5ff5", "qage": 9, "rm": 1}, {"uin": 799614279, "role": 2, "g": 0, "join_time": 1594884719, "last_speak_time": 1600565607, "lv": {"point": 0, "level": 1}, "card": "\u9c81\u6d25\u5065", "tags": "-1", "flag": 0, "nick": "\u4e28\u5bd2\u5c10\u6708\u309e", "qage": 13, "rm": 1}, {"uin": 695254152, "role": 2, "g": 0, "join_time": 1594886366, "last_speak_time": 1600572106, "lv": {"point": 0, "level": 1}, "card": "\u738b\u7965\u9f99", "tags": "-1", "flag": 0, "nick": "\u8ffd\u68a6\u8d64\u5b50\u5fc3", "qage": 13, "rm": 1}, {"uin": 251202767, "role": 2, "g": 1, "join_time": 1594943472, "last_speak_time": 1600572310, "lv": {"point": 0, "level": 1}, "card": "\u9ad8\u96ef", "tags": "-1", "flag": 0, "nick": "\u7d2b\u8272\u7cbe\u7075", "qage": 16, "rm": 1}, {"uin": 120617143, "role": 2, "g": 1, "join_time": 1595481073, "last_speak_time": 1596951515, "lv": {"point": 0, "level": 1}, "card": "\u7b71", "tags": "-1", "flag": 0, "nick": "\u6668\u98ce\u5915\u96e8", "qage": 18, "rm": 1}, {"uin": 357084975, "role": 2, "g": 1, "join_time": 1595817181, "last_speak_time": 1600572106, "lv": {"point": 0, "level": 1}, "card": "\u674e\u97e9\u97e9", "tags": "-1", "flag": 0, "nick": "\u2581\u2581\u5e7b\u68a6\u541f\u8ff7\u60d1\u4e0d\u4f4f\u7684\u5fc3", "qage": 8, "rm": 1}, {"uin": 296915611, "role": 2, "g": -1, "join_time": 1595927320, "last_speak_time": 1600572383, "lv": {"point": 0, "level": 1}, "card": "\u9b4f\u5f3a", "tags": "-1", "flag": 0, "nick": "\u8def\u4eba\u7532@\u63d0\u4e0d\u8d77\u52b2", "qage": 13, "rm": 1}], "count": 48, "svr_time": 1600572532, "max_count": 200, "search_count": 48, "extmode": 0} import jsonpath print(jsonpath.jsonpath(s,'$..level')) # 入参为字典 print(jsonpath.jsonpath(s,'$.max_count')) print(type(s))
类的基本概念:
类方法 实例方法 静态方法 私有方法 私有变量 属性
import time class Person(): country = 'China' # 类变量 def __init__(self,name,age): self.name = name # 实例变量 # self.age = age self.birthday= time.time() # print(id(self)) # print(id(self.name)) def fly(self): print('fly...',self.name,str(id(self.fly))) print(f"{self.name} is flying!!") def run(self): print('run...', self.name, str(id(self.run()))) print(f"{self.name} is running!!!") def say(self): # 实例方法 print(f"{self.name} 我的国籍是 {self.country}") print(f"我的年龄是:{self.age}") @classmethod # 类方法 def putonghua(cls): print(cls.country) # print(cls.name) # 类方法不能调用实例变量和方法 但是类方法 可以被 实例化对象调用 print(f"会说普通话") @staticmethod #静态方法 实例对象 和 类 都能调用此方法,但是此方法 不能调用类方法成员 和 实例方法 成员 def suangua(): print("静态方法") @property # 不能有入参 必须要有返回值 def age(self): return int(time.time() - self.birthday) xh = Person('xiaohei',18) xb = Person('xiaobai',18) xh.country='Japan' Person.country='American' xh.say() xb.say() Person.putonghua() Person.suangua() xh.suangua() print(xh.age)
类的继承 父类方法的重写
class Lw: def driver(self): print('kaiche') def make_money(self): print('挣钱') class Xw(Lw): pass class Car: #基类 公共的方法抽出来 放在基类中,子类继承 def __init__(self,name): self.name = name def run(self): print(f"{self.name} is running...") class Bmw(Car): #继承 def fly(self): print("flying...") class Benz(Car): def swim(self): print("swimming...") class Audi(Car): def lighting(self): print("lighting...") # a = Xw() # a.driver() # a.make_money() def run(obj): obj.run() c1 = Bmw('baoman') c2 = Benz('benzi') c3 = Audi('audi') obj_list = [c1,c2,c3] for obj in obj_list: run(obj) class E: def daka(self): print("7:00") def make_money(self): print("父类有1000") class E1(E): def daka(self): # 重写父类方法 覆盖写 print("8:30") def make_money(self): #重写父类方法 保留父类的方法逻辑 继续添加子类逻辑 super().make_money() print("又赚取10000") class E2(E): def daka(self): print("9:00") class E3(E): def daka(self): print("9:30") def daka(obj): obj.daka() e1 = E1() e2 = E2() e3 = E3() e_l = [e1,e2,e3] for obj in e_l: daka(obj) e1.make_money()
基本概念解释:
类 一个模板,一个模型。 对象 根据模板造出来的具体的东西 实例 根据模板造出来的具体的东西 实例化 把模板做成具体东西的过程。 构造函数: 1、类在实例化的时候,自动执行的函数 2、如果要使用这个类,必须要传一些参数的时候参数写在构造函数里面 析构函数: 实例被销毁的时候自动执行的函数。 私有: 只能通过self调用,不能能过实例调用。 只能在类里面用,类外面不能用 自己定义的方法和变量,如果是__开头,就是私有的 实例方法: 必须实例化时候才可以调用的,只要参数有self 类方法 公共的方法,直接可以通过类名来调用 不需要实例化,通过实例也可以调用 类变量 定义在类里面的变量 实例变量、成员变量: self.xxxx 静态方法 和一个普通方法没有任何区别,和类也没有什么关系,只是定义在类里面而已。 属性方法 一个看起来像变量的方法。不能有入参,必须要有返回值 本类对象: self this 继承 封装、继承、多态 面向对象的3大特性 # 封装: 把零散的代码封装到一起,化零为整 继承: 多态:没有,python里面根本不需要多态