Python:兩類之間的關系——關聯與依賴
- 一個物件的屬性是另一個類創建的物件
- 一個類中函式的形參是另一個類創建的物件
例題1:
注記:A為teacher類,B為course類,
class A:
def init(self , name , age):
self.teacher_name = name
self.teacher_age = age
self.salary = 2000 #設定一個不需外部傳遞引數的屬性salary
class B:
def init(self , course_name , cost , teacher):
self.course_name = course_name
self.course_teacher = teacher #保證類A創建的(以teacher形參命名)的物件能被類B在內部(以self.course_teacher形式)在各個函式內呼叫
self.course_cost = cost
def class_up(self):
self.course_teacher.salary += self.course_cost #即self.course_teacher = T1
T1 = A(‘張三’,24)
T2 = A(‘李四’,25)
C1 = B(‘高數課’,30,T1) #T1以一個類A物件的形式作為類B的引數
print(C1.course_name) #輸出:高數課
#C1.course_teacher= T1, C1.course_teacher.teacher_name = T1.teacher_name
print(C1.course_teacher.teacher_name)
print(C1.course_teacher.teacher_age) #同上
print(C1.course_teacher.salary)
C1.class_up()
print(C1.course_teacher.salary)
關鍵點:
類A創建的物件 = 類B的形參
=> 類B內可呼叫A的屬性和方法 or
類B創建的物件—>形參—>類A的屬性和方法(箭頭代指訪問)
參考原鏈接:link
例題2:
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,housetype,area):
self.housetype = housetype
self.area = area
self.free_area = area
self.itemslist = []
def add(self, item):
#傳入的item形參為House創建的物件,故可直接訪問House中屬性area
if item.area > self.free_area:
print(’%s 面積太大,無法添加’% item.name)
return
self.itemslist.append(item.name)
self.free_area -= item.area
def str(self):
return (‘戶型:%s\n總面積:%.2f\n剩余面積;%.2f\n家具名稱串列:%s’
%(self.housetype,self.area,
self.free_area,self.itemslist))
#創建家具
bed = Houseitem(‘席夢思’,400)
chest = Houseitem(“衣柜”,20)
table = Houseitem(‘餐桌’,1.5)
#創建房子
my_house = House(‘兩室一廳’,100)
my_house.add(bed)
my_house.add(chest)
my_house.add(table)
print(my_house)
關鍵點:House類中add函式形參 = Houseitem類創建的物件 => add函式內部可直接用其形參訪問Houseitem類中area屬性,
例題三:
class Gun:
def init(self,model):
self.model = model
self.bullet_count = 0
def add_bullet(self,count):
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0 :
print(’[%s]沒有子彈了…’ % self.model)
return
self.bullet_count -= 1
print(’%s tututu…[%s]’ %(self.model,self.bullet_count))
class Soldier:
def init(self,name):
self.name = name
self.gun = None #避免在外面添加屬性
def fire(self):
#判斷是否有槍
if self.gun is None:
print(’%s 沒有槍…’ % self.name)
return
print(‘沖呀…[%s]’%self.name)
#裝填子彈
self.gun.add_bullet(50) #gun中創建的物件是soldier中的屬性(self.gun = ak47)故在soldier中可用此屬性呼叫gun中的方法
#發射子彈
self.gun.shoot()
#創建槍物件
ak47 = Gun(‘AK47’)
#創建士兵-許三多
xusanduo = Soldier(‘xusanduo’)
xusanduo.gun = ak47 #用賦值陳述句把ak47交給許三多,即gun中創建的物件是soldier中的屬性
xusanduo.fire()#去呼叫槍中的 ak47.add_bullet()與 ak47.shoot()
python初學小白一枚,如有錯誤,懇請各位大神批評指正!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/162239.html
標籤:其他
