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里面根本不需要多态

 

posted @ 2021-12-26 20:37  捞铁  Views(52)  Comments(0Edit  收藏  举报