面向對象初識 logging旗艦版

面向對象初識

1.函數式編程 對 面向過程編程的兩個特色

  1. 減小代碼的重複性
  2. 加強代碼的可讀性

2.面向對象編程 對 面向過程編程

2.1 什麼是面向對象

​ 面向對象的程序設計的核心是對象(上帝式思惟),要理解對象爲什麼物,必須把本身當成上帝,上帝眼裏世間存在的萬物皆爲對象,不存在的也能夠創造出來。python

2.2 什麼是類,什麼是對象

​ 類:就是具備相同屬性和功能的一類事物。編程

​ 對象:就是類的具體表現。函數式編程

3.類的結構

class Human:
    """
    此類主要是構建人類
    """
    mind = '有思想'  # 第一部分:靜態屬性 屬性 靜態變量 靜態字段
    dic = {}
    l1 = []
    def work(self): # 第二部分:方法 函數 動態屬性
        print('人類會工做')
class 是關鍵字與def用法相同,定義一個類。
Human是此類的類名,類名使用駝峯(CamelCase)命名風格,首字母大寫,私有類可用一個下劃線開頭。
類的結構從大方向來講就分爲兩部分:
靜態變量。
動態方法。

從類名的角度研究類

class Human:
    """
    類的具體結構
    """
    # 第一部分:靜態屬性
    mind = '有思想'   # 類的屬性  (靜態屬性, 靜態字段)
    language = '使用語言'
    # 第二部分: 動態方法
    def work(self):
        print('人類都會工做')
    def eat(self):
        print('人類都須要吃飯')
1. 類名操做類中的屬性
    1. 類名查看類中全部的內容
print(Human.__dict__)
    2. 類名操做類中的靜態屬性  萬能的點.

增:
Human.body = '有頭和四肢'
刪:
del Human.mind
改:
Human.mind = 'liye腦殘'
查:
print(Human.language)
print(Human.__dict__)

2. 類名調用類中的方法(通常類中的(靜態方法,類方法)方法不會經過類名調用)
Human.work(111)

總結:
通常類名就是操做類中的屬性.

從對象角度研究類

class Human:
    """
    類的具體結構
    """
    # 第一部分:靜態屬性
    mind = '有思想'   # 類的屬性  (靜態屬性, 靜態字段)
    language = '使用語言'
    def __init__(self):
        # print(f'self---->: {self}')
        # print(666)
        self.name = '李業'
        self.age = 18

    # 第二部分: 動態方法
    def work(self):
        print('人類都會工做')

    def eat(self):
        print('人類都須要吃飯')

obj = Human()  # 實例化過程
獲得一個返回值,這個返回值就是 對象,實例.
print(f'obj---> {obj}')
實例化一個對象發生了三件事:
'''
    1. 開闢一個對象空間.
    2. 自動執行__init__方法,而且將對象地址傳給self.
    3. 運行__init__方法內的代碼,給對象空間封裝屬性.

'''


class Human:
    """
    類的具體結構
    """
    # 第一部分:靜態屬性
    mind = '有思想'   # 類的屬性  (靜態屬性, 靜態字段)
    language = '使用語言'

    def __init__(self, name, age):
        # print(f'self---->: {self}')
        # print(666)
        self.n = name
        self.a = age


    # 第二部分: 動態方法
    def work(self):
        # print(f'self---> {self}')
        print(f'{self.n}都會工做')


    def eat(self):
        print(f'{self.n}都須要吃飯')

obj = Human('李業',18)  # 實例化過程
print(obj.n)
print(obj.a)
print(obj.__dict__)

對象操做對象空間的屬性

1. 對象查看對象的空間的全部屬性

obj = Human('李業',18)
print(obj.__dict__)

2. 對象操做對象空間的屬性

obj = Human('李業',18)
增:
obj.sex = 'laddy_boy'
刪:
del obj.a
改:
obj.a = 1000
查:
print(obj.n)
print(obj.__dict__)

對象查看類中的屬性

obj = Human('李業',18)
# print(obj.mind)
obj.mind = '無腦的'
print(obj.mind)
print(Human.mind)

對象調用類中的方法

obj = Human('孫戴維', 23)
# print(f'obj---> {obj}')
obj.work()
obj.eat()

一個類能夠實例化多個對象

obj1 = Human('李業',18)
obj2 = Human('小可愛', 16)
obj3 = Human('懟姐', 18)

變量,函數名:
age_of_oldboy = 73
Ageofoldboy

logging旗艦版使用

import logging.config
# 定義三種日誌輸出格式 開始

standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d][%(levelname)s][%(message)s]' #其中name爲getlogger指定的名字

simple_format = '在 %(asctime)s %(message)s'

id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'


# log文件的全路徑
logfile_path = 'all2.log'

# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},
    'handlers': {
        #打印到終端的日誌
        'stream': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        #打印到文件的日誌,收集info及以上的日誌
        'file': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': None,  # 日誌文件
            'maxBytes': 1024*1024*1024,  # 日誌大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日誌文件的編碼,不再用擔憂中文log亂碼了
        },
    },
    'loggers': {
        #logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['stream', 'file'],  # 這裏把上面定義的兩個handler都加上,即log數據既寫入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)傳遞
        },
    },
}


def get_logger():
    path = r'F:\s24\day21\liye.log'
    LOGGING_DIC['handlers']['file']['filename'] = path
    logging.config.dictConfig(LOGGING_DIC)  # 導入上面定義的logging配置
    logger = logging.getLogger(__name__)  # 生成一個log實例
    return logger



def save():
    logger = get_logger()
    logger.info(f'{} 存入300元')  # 記錄該文件的運行狀態

save()
相關文章
相關標籤/搜索