面向對象的程序設計的核心是對象(上帝式思惟),要理解對象爲什麼物,必須把本身當成上帝,上帝眼裏世間存在的萬物皆爲對象,不存在的也能夠創造出來。python
類:就是具備相同屬性和功能的一類事物。編程
對象:就是類的具體表現。函數式編程
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__)
obj = Human('李業',18) print(obj.__dict__)
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
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()