物件之間的互動

2022-08-10 12:09:16 字數 3836 閱讀 9680

class person:  #

定義乙個人類

role = '

person'#

人的角色屬性都是人

def__init__

(self, name, aggressivity, life_value):

self.name = name #

每乙個角色都有自己的暱稱;

self.aggressivity = aggressivity #

每乙個角色都有自己的攻擊力;

self.life_value = life_value #

每乙個角色都有自己的生命值;

defattack(self,dog):

#人可以攻擊狗,這裡的狗也是乙個物件。

#人攻擊狗,那麼狗的生命值就會根據人的攻擊力而下降

dog.life_value -=self.aggressivity

class dog: #

定義乙個狗類

role = '

dog'

#狗的角色屬性都是狗

def__init__

(self, name, breed, aggressivity, life_value):

self.name = name #

每乙隻狗都有自己的暱稱;

self.breed = breed #

每乙隻狗都有自己的品種;

self.aggressivity = aggressivity #

每乙隻狗都有自己的攻擊力;

self.life_value = life_value #

每乙隻狗都有自己的生命值;

defbite(self,people):

#狗可以咬人,這裡的狗也是乙個物件。

#狗咬人,那麼人的生命值就會根據狗的攻擊力而下降

people.life_value -=self.aggressivity

egg = person('

egon

',10,1000) #

創造了乙個實實在在的人egg

ha2 = dog('

二愣子','

哈士奇',10,1000) #

創造了乙隻實實在在的狗ha2

print(ha2.life_value) #

看看ha2的生命值

egg.attack(ha2) #

egg打了ha2一下

print(ha2.life_value) #

ha2掉了10點血

舉個慄

栗子

from math import

piclass

circle:

'''定義了乙個圓形類;

提供計算面積(area)和周長(perimeter)的方法

'''def

__init__

(self,radius):

self.radius =radius

defarea(self):

return pi * self.radius *self.radius

defperimeter(self):

return 2 * pi *self.radius

circle = circle(10) #

例項化乙個圓

area1 = circle.area() #

計算圓面積

per1 = circle.perimeter() #

計算圓周長

print(area1,per1) #

列印圓面積和周長

建立乙個類就會建立乙個類的命名空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性而類有兩種屬性:靜態屬性和動態屬性

建立乙個物件/例項就會建立乙個物件/例項的命名空間,存放物件/例項的名字,稱為物件/例項的屬性

在obj.name會先從obj自己的命名空間裡找name,找不到則去類中找,類也找不到就找父類...最後都找不到就丟擲異常

軟體重用的重要方式除了繼承之外還有另外一種方式,即:組合

組合指的是,在乙個類中以另外乙個類的物件作為資料屬性,稱為類的組合

class

weapon:

def prick(self, obj): #

這是該裝備的主動技能,扎死對方

obj.life_value -= 500 #

假設攻擊力是500

class person: #

定義乙個人類

role = '

person'#

人的角色屬性都是人

def__init__

(self, name):

self.name = name #

每乙個角色都有自己的暱稱;

self.weapon = weapon() #

給角色繫結乙個**;

egg = person('

egon')

egg.weapon.prick()

#egg組合了乙個**的物件,可以直接egg.weapon來使用組合類中的所有方法

圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部圓的面積。圓環的周長是內部圓的周長加上外部圓的周長。這個時候,我們就首先實現乙個圓形類,計算乙個圓的周長和面積。然後在"環形類"中組合圓形的例項作為自己的屬性來用

class

birthdate:

def__init__

(self,year,month,day):

self.year=year

self.month=month

self.day=day

class

couse:

def__init__

(self,name,price,period):

self.name=name

self.price=price

self.period=period

class

teacher:

def__init__

(self,name,gender,birth,course):

self.name=name

self.gender=gender

self.birth=birth

self.course=course

defteach(self):

print('

teaching')

p1=teacher('

egon

','male',

birthdate(

'1995

','1

','27

'),

couse(

'python

','28000

','4 months')

) print

(p1.birth.year,p1.birth.month,p1.birth.day)

print

(p1.course.name,p1.course.price,p1.course.period)

'''執行結果:

1 27

python 28000 4 months

'''

view code

協調多個物件之間的互動 中介者模式(一)

第二種是通過qq群聊天,如圖20 1所示。如果我們使用圖20 1 a 所示方式,乙個使用者如果要與別的使用者聊天或傳送檔案,通常需要加其他使用者為好友,使用者與使用者之間存在多對多的聯絡,這將導致系統中使用者之間的關係非常複雜,乙個使用者如果要將相同的資訊或檔案傳送給其他所有使用者,必須乙個乙個的傳...

關於Fragment之間的互動

override public void onattach activity activity 二 新的onattach context context 方法,由於引數是context,可以直接獲得宿主activity的物件,避免了使用介面的步驟,更加簡單。public void onattach ...

Angular元件之間的互動

通過輸入型繫結把資料從父元件傳到子元件 child.component.ts export class childcomponent implements oninit ngoninit void child.component.html style background color 749f84 ...