詳解python對象之間的交互
先看看一般的類定義如下:
class 類名: def __init__(self,參數(shù)1,參數(shù)2): self.對象的屬性1 = 參數(shù)1 self.對象的屬性2 = 參數(shù)2 def 方法名(self):pass def 方法名2(self):pass 對象名 = 類名(1,2) #對象就是實例,代表一個具體的東西 #類名() : 類名+括號就是實例化一個類,相當(dāng)于調(diào)用了__init__方法 #括號里傳參數(shù),參數(shù)不需要傳self,其他與init中的形參一一對應(yīng) #結(jié)果返回一個對象 對象名.對象的屬性1 #查看對象的屬性,直接用 對象名.屬性名 即可 對象名.方法名() #調(diào)用類中的方法,直接用 對象名.方法名() 即可
對象之間的交互
現(xiàn)在我們已經(jīng)有一個人類了,通過給人類一些具體的屬性我們就可以拿到一個實實在在的人。
現(xiàn)在我們要再創(chuàng)建一個狗類,狗就不能打人了,只能咬人,所以我們給狗一個bite方法。
有了狗類,我們還要實例化一只實實在在的狗出來。
然后人和狗就可以打架了?,F(xiàn)在我們就來讓他們打一架吧!
class Person: # 定義一個人類 role = 'person' # 人的角色屬性都是人 def __init__(self, name, aggressivity, life_value): self.name = name # 每一個角色都有自己的昵稱; self.aggressivity = aggressivity # 每一個角色都有自己的攻擊力; self.life_value = life_value # 每一個角色都有自己的生命值; def attack(self,dog): # 人可以攻擊狗,這里的狗也是一個對象。 # 人攻擊狗,那么狗的生命值就會根據(jù)人的攻擊力而下降 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 # 每一只狗都有自己的生命值; def bite(self,people): # 狗可以咬人,這里的狗也是一個對象。 # 狗咬人,那么人的生命值就會根據(jù)狗的攻擊力而下降 people.life_value -= self.aggressivity egg = Person('egon',10,1000) #創(chuàng)造了一個實實在在的人eggprint(egg.name) # 在obj.name會先從obj自己的名稱空間里找name,找不到則去類中找,類也找不到就找父類...最后都找不到就拋出異常 ha2 = Dog('二愣子','哈士奇',10,1000) #創(chuàng)造了一只實實在在的狗ha2 print(ha2.life_value) #看看ha2的生命值 egg.attack(ha2) #egg打了ha2一下 print(ha2.life_value) #ha2掉了10點血
面向?qū)ο蟮慕M合用法
組合指的是,在一個類中以另外一個類的對象作為數(shù)據(jù)屬性,稱為類的組合
class Weapon: def prick(self, obj): # 這是該裝備的主動技能,扎死對方 obj.life_value -= 500 # 假設(shè)攻擊力是500 class Person: # 定義一個人類 role = 'person' # 人的角色屬性都是人 def __init__(self, name): self.name = name # 每一個角色都有自己的昵稱; self.weapon = Weapon() # 給角色綁定一個武器; egg = Person('egon') egg.weapon.prick() #egg組合了一個武器的對象,可以直接egg.weapon來使用組合類中的所有方法
圓環(huán)是由兩個圓組成的,圓環(huán)的面積是外面圓的面積減去內(nèi)部圓的面積。圓環(huán)的周長是內(nèi)部圓的周長加上外部圓的周長。
這個時候,我們就首先實現(xiàn)一個圓形類,計算一個圓的周長和面積。然后在"環(huán)形類"中組合圓形的實例作為自己的屬性來用
from math import pi class Circle: ''' 定義了一個圓形類; 提供計算面積(area)和周長(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) #實例化一個圓 area1 = circle.area() #計算圓面積 per1 = circle.perimeter() #計算圓周長 print(area1,per1) #打印圓面積和周長 class Ring: ''' 定義了一個圓環(huán)類 提供圓環(huán)的面積和周長的方法 ''' 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) #實例化一個環(huán)形 print(ring.perimeter()) #計算環(huán)形的周長 print(ring.area()) #計算環(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) ''' 運行結(jié)果: 1995 1 27 python 28000 4 months '''
以上就是詳解python對象之間的交互的詳細(xì)內(nèi)容,更多關(guān)于python 對象交互的資料請關(guān)注腳本之家其它相關(guān)文章!
- 解決redis與Python交互取出來的是bytes類型的問題
- Python3交互式shell ipython3安裝及使用詳解
- python和js交互調(diào)用的方法
- python交互模式基礎(chǔ)知識點學(xué)習(xí)
- Python控制臺實現(xiàn)交互式環(huán)境執(zhí)行
- Python Tornado實現(xiàn)WEB服務(wù)器Socket服務(wù)器共存并實現(xiàn)交互的方法
- python實現(xiàn)撲克牌交互式界面發(fā)牌程序
- python實現(xiàn)與redis交互操作詳解
- python GUI庫圖形界面開發(fā)之PyQt5中QWebEngineView內(nèi)嵌網(wǎng)頁與Python的數(shù)據(jù)交互傳參詳細(xì)方法實例
- python與mysql數(shù)據(jù)庫交互的實現(xiàn)
- 基于python plotly交互式圖表大全
- python 用戶交互輸入input的4種用法詳解
相關(guān)文章
Python實現(xiàn)機(jī)器學(xué)習(xí)算法的分類
今天給大家整理了Python實現(xiàn)機(jī)器學(xué)習(xí)算法的分類的文章,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06Python 用NumPy創(chuàng)建二維數(shù)組的案例
這篇文章主要介紹了Python 用NumPy創(chuàng)建二維數(shù)組的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03python機(jī)器學(xué)習(xí)高數(shù)篇之函數(shù)極限與導(dǎo)數(shù)
這篇文章主要介紹了python機(jī)器學(xué)習(xí)高數(shù)篇之函數(shù)極限和導(dǎo)數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08通俗的講解深度學(xué)習(xí)中CUDA,cudatookit,cudnn和pytorch的關(guān)系
有些剛?cè)胄械呐笥芽偸歉悴磺宄﨏UDA,cudatookit,cudnn和pytorch的關(guān)系,那么今天這篇文章用通俗易懂的話講解了他們之間的關(guān)系,需要的朋友可以參考下,相信會對你有所幫助2023-03-03Python實現(xiàn)雙軸組合圖表柱狀圖和折線圖的具體流程
這篇文章主要介紹了Python雙軸組合圖表柱狀圖+折線圖,Python繪制雙軸組合的關(guān)鍵在plt庫的twinx()函數(shù),具體實例代碼跟隨小編一起看看吧2021-08-08