day06 Python class基礎篇

一.目錄 

1.類與對象的概述python

2.封裝算法

3.繼承app

4.多態函數

5.類的成員spa

6.類與類之間的關係設計

7.私有對象

二. 內容講解

一.類與對象的概述

      類是對一系列具備相同屬性的事物的抽象,相同於設計圖紙,而對象則是某個具體的事物,二者之間的關係對象是基於類來實現的。類是對對象的描述,類裏面通常包含屬性和方法,而屬性的設置通常經過__init__()構造 函數來實現,其餘的函數在類裏面稱爲方法,由於比普通函數都了一個self。blog

類是負責描述對象的    ->  類型
定義屬性和方法
對象是經過類來建立的具體的個體. 每一個對象都有本身的獨立的名稱空間

執行動做的時候最好是使用對象去執行.

self : 當前正在執行方法的對象

實例1:建立類和對象繼承

class Person:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender

def talk(self):
print("we can speak Chinese")

def sleep(self):
print("the studies show us, adult people should sleep at least 7 hours everyday")

p = Person("Ivy","24","female")
p.talk()
原理分析:建立類的時候會自動在內存裏面生成一個類名稱空間,當實例化一個對象的時候有會生成另外一個名稱空間,對象會直接把類下面init裏面的屬性copy到本身的名稱空間裏,
而後須要使用類方法的時候,對象會直接找類裏面的方法。

實例2:給類裏面的方法傳參ip

例子3:寫開演唱會

class Singer:
def __init__(self,name,salary,gender,songs = []):
self.name = name
self.salary = salary
self.gendeer = gender
self.songs = songs

def song_list(self,songs_lst):
for s in songs_lst:
self.songs.append(s)

def sing(self,song):
print(f'{self.name} is singing {song}')

def live(self):
for item in self.songs:
print(f'{self.name} is singing {item}')

songs_list = ["寓言","阿刁","花房姑娘"]
singer = Singer("Angela","100000","female",songs_list)
singer.sing("淋雨一直走")
singer.live()

例子4 銀行存取錢
class Account:
def __init__(self,card,password,money=10):
self.card = card
self.pwd = password
self.money = money

def saving(self):
if self.card == "100000" and self.pwd == "123456":
saving_number = int(input("Please input money number that you want to saving: ").strip())
self.money += saving_number
else:
print("card number or password is wrong")


def take_money(self):
if self.card == "100000" and self.pwd == "123456":
taking_money = int(input("please input the money number which you plan to take out: "))
if taking_money <= self.money:
print(f"you can take money {taking_money}")
self.money -= taking_money
else:
print('sorry,Insufficient balance')
else:
print("card number or password is wrong")


def banlance(self):
print(f'your current balance is {self.money}')

p = Account("100000","123456")
p.banlance()
p.saving()
p.take_money()
p.banlance()

例子5 對一組模板的定義
class Msg:
def email(self):
print("send message through email")
def chat(self):
pass
def wechat(self):
print("send message through wechat")

def app(self):
print("send message through app")

def important(self):
self.email()
self.wechat()
self.app()

msg = Msg()
msg.important()

二.封裝

 屬性的封裝:把多個變量封裝到一個對象中

 方法的封裝:把多個方法封裝到一個對象中

三.繼承

   子類能夠自動擁有父類的功能除了私有的之外

   單繼承:

class NiuMaoWang:
def fly(self):
print("flying")

class HongHaiEr(NiuMaoWang):
pass

honghaier = HongHaiEr()
honghaier.fly()

多繼承:
class NiuMaoWang:
def fly(self):
print("flying")

class TieSan:
def PutOffFire(self):
print("put out fire")
class HongHaiEr(NiuMaoWang,TieSan):
pass

honghaier = HongHaiEr()
honghaier.fly()
honghaier.PutOffFire()
ps: 一個子類能夠擁有多個父類。若是繼承了多個父類,會有優先查找最近的那個一。父類也稱爲基類和超類,子類也稱爲派生類(python3 裏面的繼承都是廣度優先,
python2裏面默認是深度優先,採用C3算法)

四.多態

 同一個對象,多重形態

def duck(duckk):
duckk.bulk()

class Monkey:
def __self__(self):
pass

def bulk(self):
print("bulking")

monkey = Monkey()
monkey.bulk()
duck(monkey)

待補充

五.類的成員

  1.變量 分爲類變量和實例變量 

       實例變量:對象.方法 調用。

       類變量: 直接定義在類裏面,對全部對象開放,特色節約內存,經過類直接調用。(也可使用實例來調用but不推薦)

  2.方法

     2.1.實例方法:對象.方法 

     2.2.類方法:類名.方法 

           第一個參數要求傳過來一個類

           類方法上面必須加一個@classmethod

     2.3.靜態方法:類名.方法  也能夠是對象.方法

           類方法上面必須加@staticmethod裝飾器,至關於在類的名稱空間定義了一個普通函數,主要是作分類用。

  3.屬性

      把一個方法裝飾成一個函數來使用 在類方法上方加@propeerty,主要使用的場景作某些函數會隨着時間的推移而變化,例如:年齡或者分頁。

六.類與類之間的關係

     1.依賴關係

           兩個事物之間聯繫不緊密,我須要你可是你不屬於我,類與類之間最鬆散的一種關係。在執行某個方法的時候把另一個類的對象傳遞進來

       

class Person:
def __init__(self,name,gender):
self.name = name
self.gender = gender

def play_game(self,tools): ps:經過傳遞參數產生聯繫
tools.wzry()

class Phone:
def __init__(self,brand,price):
self.brand = brand
self.price = price

def wzry(self):
print(f'{self.brand} is running 王者榮耀')

phone = Phone("米6","2300")
person = Person("Ivy","female")
person.play_game(phone)

     2.關聯關係(我須要你,你也屬於我),組合關係,聚合關係

      2.1.關聯關係: 兩種事物必須是互相關聯的. 可是在某些特殊狀況下是能夠更更改和更更換的.

      2.2. 聚合關係. 屬於關聯關係中的⼀一種特例例. 側重點是xxx和xxx聚合成xxx.  各⾃自有各⾃自的 聲明週期. 好比電腦. 電腦⾥裏里有CPU, 硬盤, 內存等等. 電腦掛了了. CPU仍是好的. 仍是 完整的個體

      2.3. 組合關係. 屬於關聯關係中的⼀一種特例例. 寫法上差很少. 組合關係比聚合還要緊密. 比 如⼈人的⼤大腦, ⼼心臟, 各個器官. 這些器官組合成⼀一個⼈人. 這時. ⼈人若是掛了了. 其餘的東⻄西 也跟着掛了了. 

         例1:關聯一對一

class Boy:
def __init__(self,name,gender,GirlFriend = None):
self.name = name
self.age = gender
self.GirlFriend = GirlFriend

def hava_a_dinner(self):
if self.GirlFriend:
print(f'{self.name} hava a dinner with {self.GirlFriend.name}')
else:
print("single dog, you have no right for dinner")

class Girl:
def __init__(self,name,gender):
self.name = name
self.gender = gender

def makeup(self):
print(f'{self.name} has a big advantege is makeup herself like 20 years old')
girl = Girl("如花","female")
boy = Boy("Jack","male",girl)
boy.hava_a_dinner()
boy.GirlFriend = None
boy.hava_a_dinner()

例2:關聯一對多
class Teacher:
def __init__(self,name,student_list = []):
self.name = name
self.student_list = student_list

def teach(self):
print(f'{self.name} is teaching')
for student in self.student_list:
student.study()

class Student:
def __init__(self,name):
self.name = name

def study(self):
print(f'{self.name} is studying')

s1 = Student("Ivy")
s2 = Student("Zoe")
s3 = Student("Yvette")
lst = [s1,s2,s3]
t = Teacher("Tony",lst).teach()
s1.study()

     3.繼承關係,實現關係

 

七.私有

雙下劃線開頭的是私有的內容
相關文章
相關標籤/搜索