溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

一文了解python對(duì)象之間的交互

發(fā)布時(shí)間:2020-10-29 17:14:13 來(lái)源:億速云 閱讀:168 作者:Leah 欄目:開發(fā)技術(shù)

本篇文章為大家展示了一文了解python對(duì)象之間的交互,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

先看看一般的類定義如下:

class 類名:
  def __init__(self,參數(shù)1,參數(shù)2):
    self.對(duì)象的屬性1 = 參數(shù)1
    self.對(duì)象的屬性2 = 參數(shù)2

  def 方法名(self):pass

  def 方法名2(self):pass

對(duì)象名 = 類名(1,2) #對(duì)象就是實(shí)例,代表一個(gè)具體的東西
         #類名() : 類名+括號(hào)就是實(shí)例化一個(gè)類,相當(dāng)于調(diào)用了__init__方法
         #括號(hào)里傳參數(shù),參數(shù)不需要傳self,其他與init中的形參一一對(duì)應(yīng)
         #結(jié)果返回一個(gè)對(duì)象
對(duì)象名.對(duì)象的屬性1  #查看對(duì)象的屬性,直接用 對(duì)象名.屬性名 即可
對(duì)象名.方法名()   #調(diào)用類中的方法,直接用 對(duì)象名.方法名() 即可

對(duì)象之間的交互

現(xiàn)在我們已經(jīng)有一個(gè)人類了,通過(guò)給人類一些具體的屬性我們就可以拿到一個(gè)實(shí)實(shí)在在的人。
現(xiàn)在我們要再創(chuàng)建一個(gè)狗類,狗就不能打人了,只能咬人,所以我們給狗一個(gè)bite方法。
有了狗類,我們還要實(shí)例化一只實(shí)實(shí)在在的狗出來(lái)。
然后人和狗就可以打架了。現(xiàn)在我們就來(lái)讓他們打一架吧!

class Person: # 定義一個(gè)人類
  role = 'person' # 人的角色屬性都是人

  def __init__(self, name, aggressivity, life_value):
    self.name = name # 每一個(gè)角色都有自己的昵稱;
    self.aggressivity = aggressivity # 每一個(gè)角色都有自己的攻擊力;
    self.life_value = life_value # 每一個(gè)角色都有自己的生命值;

  def attack(self,dog):
    # 人可以攻擊狗,這里的狗也是一個(gè)對(duì)象。
    # 人攻擊狗,那么狗的生命值就會(huì)根據(jù)人的攻擊力而下降
    dog.life_value -= self.aggressivity

class Dog: # 定義一個(gè)狗類
  role = 'dog' # 狗的角色屬性都是狗

  def __init__(self, name, breed, aggressivity, life_value):
    self.name = name # 每一只狗都有自己的昵稱;
    self.breed = breed # 每一只狗都有自己的品種;
    self.aggressivity = aggressivity # 每一只狗都有自己的攻擊力;
    self.life_value = life_value # 每一只狗都有自己的生命值;

  def bite(self,people):
    # 狗可以咬人,這里的狗也是一個(gè)對(duì)象。
    # 狗咬人,那么人的生命值就會(huì)根據(jù)狗的攻擊力而下降
    people.life_value -= self.aggressivity

egg = Person('egon',10,1000) #創(chuàng)造了一個(gè)實(shí)實(shí)在在的人eggprint(egg.name)        # 在obj.name會(huì)先從obj自己的名稱空間里找name,找不到則去類中找,類也找不到就找父類...最后都找不到就拋出異常
ha2 = Dog('二愣子','哈士奇',10,1000) #創(chuàng)造了一只實(shí)實(shí)在在的狗ha2
print(ha2.life_value)     #看看ha2的生命值
egg.attack(ha2)        #egg打了ha2一下
print(ha2.life_value)     #ha2掉了10點(diǎn)血

面向?qū)ο蟮慕M合用法

組合指的是,在一個(gè)類中以另外一個(gè)類的對(duì)象作為數(shù)據(jù)屬性,稱為類的組合

class Weapon:
  def prick(self, obj): # 這是該裝備的主動(dòng)技能,扎死對(duì)方
    obj.life_value -= 500 # 假設(shè)攻擊力是500

class Person: # 定義一個(gè)人類
  role = 'person' # 人的角色屬性都是人

  def __init__(self, name):
    self.name = name # 每一個(gè)角色都有自己的昵稱;
    self.weapon = Weapon() # 給角色綁定一個(gè)武器;
    
egg = Person('egon')
egg.weapon.prick() 
#egg組合了一個(gè)武器的對(duì)象,可以直接egg.weapon來(lái)使用組合類中的所有方法

圓環(huán)是由兩個(gè)圓組成的,圓環(huán)的面積是外面圓的面積減去內(nèi)部圓的面積。圓環(huán)的周長(zhǎng)是內(nèi)部圓的周長(zhǎng)加上外部圓的周長(zhǎng)。
這個(gè)時(shí)候,我們就首先實(shí)現(xiàn)一個(gè)圓形類,計(jì)算一個(gè)圓的周長(zhǎng)和面積。然后在"環(huán)形類"中組合圓形的實(shí)例作為自己的屬性來(lái)用

from math import pi

class Circle:
  '''
  定義了一個(gè)圓形類;
  提供計(jì)算面積(area)和周長(zhǎng)(perimeter)的方法
  '''
  def __init__(self,radius):
    self.radius = radius

  def area(self):
     return pi * self.radius * self.radius

  def perimeter(self):
    return 2 * pi *self.radius


circle = Circle(10) #實(shí)例化一個(gè)圓
area1 = circle.area() #計(jì)算圓面積
per1 = circle.perimeter() #計(jì)算圓周長(zhǎng)
print(area1,per1) #打印圓面積和周長(zhǎng)

class Ring:
  '''
  定義了一個(gè)圓環(huán)類
  提供圓環(huán)的面積和周長(zhǎng)的方法
  '''
  def __init__(self,radius_outside,radius_inside):
    self.outsid_circle = Circle(radius_outside)
    self.inside_circle = Circle(radius_inside)

  def area(self):
    return self.outsid_circle.area() - self.inside_circle.area()

  def perimeter(self):
    return self.outsid_circle.perimeter() + self.inside_circle.perimeter()


ring = Ring(10,5) #實(shí)例化一個(gè)環(huán)形
print(ring.perimeter()) #計(jì)算環(huán)形的周長(zhǎng)
print(ring.area()) #計(jì)算環(huán)形的面積

用組合的方式建立了類與組合的類之間的關(guān)系,它是一種‘有'的關(guān)系,比如教授有生日,教授教python課程

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
  def teach(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)
''' 
運(yùn)行結(jié)果: 
1995 1 27 
python 28000 4 months 
'''

上述內(nèi)容就是一文了解python對(duì)象之間的交互,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI