008 面對物件的封裝案例

2021-10-03 15:11:37 字數 4227 閱讀 6452

# 案例

class

person

:def

__init__

(self, name, weight)

:# self.屬性 = 形參

self.name = name

self.weight = weight

def__str__

(self)

:return

"我的名字叫 %s 體重是 %.2f"

%(self.name, self.weight)

defrun

(self)

:print

("%s 愛跑步,鍛鍊身體"

% self.name)

self.weight -=

0.5def

eat(self)

:print

("%s 是吃貨,吃完這頓再**"

%self.name)

self.weight +=

1

xiaoming = person(

"小明"

,75.0

)xiaoming.run(

)xiaoming.eat(

)print

(xiaoming)

小明 愛跑步,鍛鍊身體

小明 是吃貨,吃完這頓再**

我的名字叫 小明 體重是 75.50

xiaomei = person(

"小美"

,45.0

)xiaomei.run(

)xiaomei.eat(

)print

(xiaomei)

print

(xiaoming)

小美 愛跑步,鍛鍊身體

小美 是吃貨,吃完這頓再**

我的名字叫 小美 體重是 45.50

我的名字叫 小明 體重是 75.50

# 案例,被使用的類通常先開發

# 家具類

class

houseitem

:def

__init__

(self, name, area)

:

self.name = name

self.area = area

def__str__

(self)

:return

"[%s]占地 %.2f"

%(self.name, self.area)

class

house

:def

__init__

(self, house_type, area)

:

self.house_type = house_type

self.area = area

# 剩餘面積

self.free_area = area

# 家具名稱列表

self.item_list =

def__str__

(self)

:#python 中能夠自動將一對括號內部的**連線在一起

return

("戶型: %s \n 總面積:%.2f \n [剩餘:%.2f]\n 家具:%s"

%(self.house_type, self.area,

self.free_area, self.item_list)

)def

add_item

(self, item)

:print

("要新增 %s"

% item)

# 1.判斷家具面積

if item.area > self.free_area:

print

("{} 的面積太大了,無法新增"

.format

(item.name)

)return

# 2.將家具名稱新增到家具列表

# 3.計算剩餘面積

self.free_area -= item.area

# 1、建立家具

bed = houseitem(

"席夢思"

,100

)chest = houseitem(

"衣櫃",2

)table = houseitem(

"餐桌"

,1.5

)print

(bed)

print

(chest)

print

(table)

# 2、建立房子物件

my_home = house(

"兩室一廳",60

)my_home.add_item(bed)

my_home.add_item(chest)

my_home.add_item(table)

print

(my_home)

[席夢思]占地 100.00

[衣櫃]占地 2.00

[餐桌]占地 1.50

要新增 [席夢思]占地 100.00

席夢思 的面積太大了,無法新增

要新增 [衣櫃]占地 2.00

要新增 [餐桌]占地 1.50

戶型: 兩室一廳

總面積:60.00

[剩餘:56.50]

家具:[『衣櫃』, 『餐桌』]

#案例2

class

gun:

def__init__

(self, model)

:# 1. 搶的型號

self.model = model

#2.子彈數量

self.bullet_count =

0def

add_bullet

(self, count)

:

self.bullet_count += count

defshoot

(self)

:# 1.判斷子彈數量

if self.bullet_count <=0:

print

("{}沒有子彈了..."

.format

(self.model)

)return

#2.發射子彈

self.bullet_count -=

1#3.提示發射資訊

print

("{} 突突突...{}"

.format

(self.model, self.bullet_count)

)class

soldier

:def

__init__

(self, name)

:#1.姓名

self.name = name

#2.槍-新兵沒有槍

# 在定義屬性的時候不知道賦什麼值,就用none代替

self.gun =

none

deffire

(self)

:#1.判斷士兵是否有槍

#if self.gun == none:

# 在使用none進行判斷的時候,需要使用is進行規範,而不是 ==,進行判斷。

if self.gun is

none

:print

("{}還沒有槍..."

.format

(self.name)

)return

#2.高喊口號

print

("衝啊...{}"

.format

(self.name)

)#3.讓槍裝滿子彈

self.gun.add_bullet(50)

#4.讓槍發射子彈

self.gun.shoot(

)# 乙個物件的屬性,可以使另外乙個類建立的物件。

# 1.建立槍物件

ak47 = gun(

"ak47"

)#2.建立許三多

xusanduo = soldier(

"許三多"

)xusanduo.gun = ak47

xusanduo.fire(

)print

(xusanduo.gun)

衝啊…許三多

ak47 突突突…49

<main.gun object at 0x030d0e30>

面對物件和封裝

1.成員變數 屬性 在成員方法之外 成員方法 行為 不用static 修飾 使用成員變數 物件名.成員變數名 使用成員方法 物件名.成員方法名 引數 this 當方法的區域性變數和類的成員變數重名,根據 就近原則 優先使用區域性 若需要訪問本類當中的成員變數,格式 this.成員變數變數名 通過誰呼...

mysql面對物件 面對物件資料庫

物件導向的方式訪問資料庫 造物件 db new mysqli localhost root 123 mydb 判斷連線是否出錯 if mysqli connect error mysqli connect error or die 連線失敗!寫sql語句 sql insert into info v...

面對物件之封裝 this關鍵字

一 this關鍵字主要有三個特徵應用 1 thiis呼叫本類中的屬性,也就是類中的成員變數,可以處理方法中成員變數與引數重名的情況。2 this呼叫本類中的其他方法。例如下面this呼叫當前物件的方法 3 this呼叫本類中的其他構造方法,呼叫時要放在構造方法的首行。this重大的作用 返回類的引用...