復習day12
1.迭代器和生成器
- 迭代器:獲取數據:next(迭代器),for循環遍歷,數據來源:轉換,生成器
- 生成器:就是迭代器
def 函數名():
yield 值
(表達 for 變量 in 序列 if 條件語句)
2.模塊
- 模塊就是py文件
- 包/庫 就是文件夾
- 導入模塊中所有的內容
from math import *
- 阻止調用執行
if __name__ == '__main__':
pass
3.異常處理
- try:
需要捕獲異常的代碼段 - except:
出現異常后對異常的處理代碼 - finally:
不管try后面的代碼是否異常,異常是否被捕獲都會執行的代碼
補充:三目運算符
中的三目運算符: 表達式?值1:值2 -- 判斷表達是否為真:如果是整個運算的結果是值1 ,否者是值2
python的三目運算符:值1 if 表達式: else 值2
print('奇數' if 22 % 2 else '偶數')
一.類
1. 什么是類,什么是對象
1.1官方定義
- 類:就是擁有相同功能和相同屬性的對象的集合
- 對象:就是累的實例
1.2生活角度看類和對象
- 如果人是類,yt就是對象,l也是對象
- 如果電腦是類,具體到單個實物就是對象
2. 類的聲明
2.1 語法
class 類名:
類的內容
2.2 說明
- class:聲明類的關鍵字固定寫法
-
類名: 標識符,不能是關鍵字
見名知意 ,采用駝峰式命名(采用通過單詞首字母大寫的方式來區分不同的單詞),首字母大寫 -
: 固定寫法
內的內容 - 主要包含: 類的說明文檔, 屬性(普通變量) ,功能(函數/方法)
class Person:
"""人類"""
# ========屬性===========
# ========屬性===========
pass
3.對象怎么聲明
對象 = 類() - 創建指定的類的對象
4.類中的方法
4.1 什么是方法
- 聲明在類中的函數就叫方法
4.2 類中的方法
- 有三種:對象方法,類方法,靜態方法
4.2.1 對象方法
- 直接聲明在類中的函數,
- 有默認參數self,通過對象調用的時候這個參數不用傳參,因為系統會自動將當前對象傳遞給self
(self,當前對象 - 誰調用self就指向誰,當前類的對象能做的事情self都能做) - 通過類的對象來調用(記!!!)
# class Person:
# def eat(self, food):
# print('人吃' + food)
4.2.2 類的方法
- 聲明函數前加@classmethod
- 有默認參數cls,通過類調用的時候這個參數不用傳參,因為系統會自動將當前類傳遞給cls
- cls,當前類 - 誰調用誰就指向誰,當前類能做的事 cls
- 通過類來調用: 類.類方法
4.2.3 靜態方法
- 聲明函數前加@staticmethod
- 沒有默認參數
- 通過類來調用:類.靜態方法
class Person:
"""人類"""
#3 對象方法
def eat(self, food):
print(str(self) + '吃' + food)
self.study('python')
def study(self, type1):
print('學習'+type1)
#2 類方法
@classmethod
def destroy(cls):
cls.func1()
print('人類改變環境')
@classmethod
def func1(cls):
print('類方法')
#2 靜態方法
@staticmethod
def beat_animal():
print("上課,睡覺,打豆豆")
p1 = Person()
p2 = Person()
p1.eat('雞')
p2.eat('炸雞')
Person.destroy()
Person.beat_animal()
二.類的屬性
- 內中的屬性分為:對象屬性和字段
1.字段
- 直接聲明在類中的變量就叫字段
- 字段要通過'類.字段'的方式來使用
- 當屬性的值不會因為對象不同而不同,這種屬性就可以聲明成類的字段
class Dog:
"""狗"""
# =======字段========
numbers = 10
Dog.numbers =100
print(Dog.numbers)
2 對象屬性
2.0什么數據init方法
- init是類默認繼承的一個魔法方法,用來初始化類:本質是對象方法,但不需要程序員自己調用,會自動調用
class Person :
def __init__(self, name):
print(name +'init方法')
p1 = Person('你好')
- 通過類創建對象的時候,系統會自動調用類中的init方法,并且構造方法中的實參會全部傳給init
- 創建對象的時候需不需要參數,需要幾個參數,看這個內的init方法
- 了解 聲明了的時候系統會自動給我們創建一個函數,這個函數的函數名和聲明的類的類名一樣,這個函數叫構造方法
- 函數會在內存中開辟空間創建對象,然后用創建的對象去調用類的init方法,然后才將對象返回
2.1對象屬性
- 在init方法中,以'self.屬性=值'的的形式聲明
- 對象屬性要通過'對象.屬性'的方式來使用
- 當屬性的值會因為對象的不同而不同的時候使用對象屬性
class Dog:
"""狗"""
# =======字段========
numbers = 10
def __init__(self, name = '大黃', age = 2, gender = 'boy', color = '白色'):
self.color = color
self.gender = gender
self.age = age
self.name = name
d = Dog()
print(d.color)
print(d.gender)
print(d.age)
print(d.name)
print('======================')
d1 = Dog(name='巫妖王', color='黑色', age=999, gender='前方高能')
print(d1.color)
print(d1.gender)
print(d1.age)
print(d1.name)
- 練習: 聲明一個學生類,用于屬性:名字,電話,年齡,學號 擁有功能 學習(打印XXX在學XXX)
class Student_msg:
def __init__(self, name, tel='00000000000', age=0, number='stu9999',
gender='boy'):
self.name = name
self.tel = tel
self.age = age
self.number = number
self.gender = gender
numbers = 19292
def learing(self, subject: str):
print(Student_msg.numbers)
print('%s在學%s' % (self.name, subject))
a1 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃雞')
a2 = Student_msg('大雕')
print(a1.number, a1.name, a1.gender, a1.age, a1.tel)
a1.learing('吃雞')
3 聲明類的時候方法的選擇
- 1 對象方法:實現函數的功能需要對象屬性的時候,就使用對象方法
- 2 類方法:實現函數的功能不需要對象屬性,但是需要類的相關操作就使用類方法
- 3 靜態方法:實現函數的功能即不需要對象屬性,也不需要類相關的操作就使用靜態方法
- 寫一個矩形類,有屬性:長和寬 方法:求面積,求周長
class Rect:
"""矩形"""
def __init__(self,weigh,height):
self.weigh = weigh
self.height = height
def area(self):
return self.height*self.weigh
def perimeter(self):
return (self.height+self.weigh)*2
def show_msg(self):
return '矩形%dX%d的周長是:%d 面積是:%d'%(self.weigh,self.height,self.perimeter(),self.area())
p = Rect(30, 60)
print(p.show_msg())
三. python中的對象屬性支持增,刪,改,查
class Dog:
def __init__(self, name):
self.name =name
self.age = 0
dog1 =Dog('大黃')
dog2 =Dog('猜猜')
1.查
- a.對象.屬性 - 獲取指定屬性對應的值,如果屬性不存在會報錯
- b. getattr(對象,屬性名,默認值) 獲取指定屬性對應的值
當屬性不存在有默認值的時候不報錯,返回默認值
沒設置默認值的時候回報錯
print(dog1.name)
print(getattr(dog1, 'name2', '無名狗'))
2.增,改
- a.對象.屬性 = 值 - 當屬性不存在就添加屬性,當屬性存在修改屬性的值
- b.setattr(對象,屬性名,值) - 當屬性不存在就添加屬性,當屬性存在修改屬性的值
dog1.name = '貝貝'
print(dog1.name)
a_name = 'color'
setattr(dog1, a_name, '白色')
print(dog1.color)
setattr(dog1, 'name', '靜靜')
print(dog1.name)
3 刪
- del 對象.屬性
- delattr(對象,屬性名)
print(getattr(dog1, 'name', '無名狗,嗚嗚嗚'))
del dog1.name
print(getattr(dog1, 'name', '無名狗,哦哦哦哦哦哦'))
delattr(dog2, 'age')
print(getattr(dog2, 'age', '還沒出生的dog'))
- 注意對象屬性的增刪改查只針對單個對象