接上封裝
class Phone:__volt=0.5def __keepsinglecore(self):print("讓cpu以單核運行")def if5G(self):if self.__volt>=1:print("5G通話已開啟")else:self.__keepsinglecore()print("電量不足,無法使用5G通話,已經設置為單核運行來省電")phone=Phone()
phone.if5G()
私有的成員變量和方法我們外部是無法使用的,但是內部的其他成員方法是可以使用的
練習題
class Phone:__is_5g_enable=Falsedef __check_5g(self):if self.__is_5g_enable==True:print("5g開啟")else:print("5g關閉,使用4g網絡")def call_by_5g(self):self.__check_5g()print("正在通話中")phone=Phone()
phone.call_by_5g()
繼承
我們雖然新開發了面部識別功能,但是我們還是會繼承之前已經有的功能
class Phone:id=Noneproducer="可是雪"def call_by_4g(self):print("4g通話")class Phone2024(Phone):face_id="10001"def call_by_5g(self):print("2024年新功能,5g通話")phone=Phone2024()
phone.call_by_5g()
phone.call_by_4g()
print(phone.producer)
繼承的類的方法和變量都可以用
下面代碼里面說了pass
我們這個類已經繼承了很多類了,不需要再添加別的東西了,所以我們就可以直接寫一個pass
class Phone:id=Noneproducer="可是雪"def call_by_4g(self):print("4g通話")class Phone2024(Phone):face_id="10001"def call_by_5g(self):print("2024年新功能,5g通話")phone=Phone2024()
phone.call_by_5g()
phone.call_by_4g()
print(phone.producer)class NFC:nfc_type="第五代"producer="可是雪"def read_card(self):print("NFC讀卡")def write_card(self):print("NFC寫卡")class RemoteControl:rc_type="紅外遙控"def control(self):print("紅外遙控開啟了")class MyPhone(Phone2024,NFC,RemoteControl):pass
phone=MyPhone()
phone.call_by_4g()
phone.call_by_5g()
phone.read_card()
phone.write_card()
phone.control()
這里面能很清楚的看見,我們直接繼承了Phone2024的,但是我們依舊可以使用phone里面的功能,也就是繼承具有連續性
假如里面有多個屬性,比如調用producer,class Phone里面也有,類NFC里面也有,此時誰比較靠左邊就是誰
復寫父類
我繼承過來的屬性和方法我都不滿意,我就直接改
class Phone:id=Noneproducer="可是雪"def call_by_5g(self):print("5g通話")class MyPhone(Phone):producer = "不是雪"def call_by_5g(self):print("開啟單核模式,確保省電")print("使用5g網絡進行通話")print("關閉單核模式,確保性能")phone=MyPhone()
phone.call_by_5g()
print(phone.producer)
子類把父類覆蓋掉
下面:
假如我已經把父類里面的東西復寫掉了,但是我還想用父類的某些變量和方法,那么我可以使用下面兩種方法
class Phone:id=Noneproducer="可是雪"def call_by_5g(self):print("5g通話")class MyPhone(Phone):producer = "不是雪"def call_by_5g(self):print("開啟單核模式,確保省電")# print("使用5g網絡進行通話")# 方式一print(f"父類的廠商是{Phone.producer}")Phone.call_by_5g(self)# 方式二print(f"父類的廠商是{super().producer}")super().call_by_5g()print("關閉單核模式,確保性能")phone=MyPhone()
phone.call_by_5g()
print(phone.producer)
應該比較喜歡super方法,方法一忘記傳self還會報錯
變量的類型注解
import json
import randomvar_1:int=10
var_2:str="hello"
var_3:bool=True
class Student:pass
stu:Student=Student()my_list:list[int]=[1,2,3,4]
my_tuple:tuple[int,str,bool]=(1,"itheima",True)
my_set:set[str,int]={"hahaha",4}
my_dict:dict={"a":1,"b":2}var_1=random.randint(1,10) #type:int
var_2=json.loads({"name":"zhangsan"}) #type:dict[str,str]
沒逝,我以后大概率不干這行,這種備注感覺不進公司沒啥用
函數和方法類型注解
# 對形參進行類型注解
def add(x:int, y:int):return x + y
# 對返回值進行類型注解
def func(data:list) ->list:return dataprint(func(1))
print(add(1,2))
Union聯合類型注解
不是一一對應,只需要把后面出現的類型都列舉出來就行
多態
class Animal:def speak(self):pass
class Dog(Animal):def speak(self):print("汪汪汪")
class Cat(Animal):def speak(self):print("喵喵喵")# 用注解
def make_noise(animal:Animal):animal.speak()
# 不用注解
# def make_noise(Animal):
# animal = Animal()
# animal.speak()
dag=Dog()
cat=Cat()
make_noise(cat)
make_noise(dag)
class AC:def cool_wind(self):# 制冷passdef hot_wind(self):# 制熱passdef swing_l_r(self):# 左右擺風passclass meidi(AC):def cool_wind(self):print("美的空調制冷")def hot_wind(self):print("美的空調制熱")def swing_l_r(self):print("美的空調左右擺風")class geli(AC):def cool_wind(self):print("格力空調制冷")def hot_wind(self):print("格力空調制熱")def swing_l_r(self):print("格力空調左右擺風")meidi = meidi()
meidi.cool_wind()
geli = geli()
geli.cool_wind()
類似于我給一個猜想,但是讓其他人去做
數據分析綜合案例
我有畏難心理,我先害怕了
果然,都明白但是自己就是不會敲,占個位
明兒在寫