Python:兩類之間的關係——關聯與依賴
- 一個對象的屬性是另外一個類建立的對象
- 一個類中函數的形參是另外一個類建立的對象
例題1:html
註記:A爲teacher類,B爲course類。python
class A:
def init(self , name , age):
self.teacher_name = name
self.teacher_age = age
self.salary = 2000 #設置一個不需外部傳遞參數的屬性salary
app
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)
url
關鍵點:
類A建立的對象 = 類B的形參
=> 類B內可調用A的屬性和方法 or
類B建立的對象—>形參—>類A的屬性和方法(箭頭代指訪問)
spa
參考原連接:link.net
例題2:htm
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))
blog
#建立傢俱
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初學小白一枚,若有錯誤,懇請各位大神批評指正!