Python 命名空間與對象的組合

      網友投稿 722 2022-05-30

      一、類命名空間與對象、實例的命名空間

      創建一個類就會創建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字稱為類的屬性

      而類有兩種屬性:靜態屬性和動態屬性

      靜態屬性就是直接在類中定義的變量

      動態屬性就是定義在類中的方法

      print(id(circle.name)) print(id(Circle.name))

      結果:

      1487618539568 1487618539568

      print(circle.area) print(Circle.area)

      結果:

      >

      創建一個對象/實例就會創建一個對象/實例的名稱空間,存放對象/實例的名字,稱為對象/實例的屬性

      在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來使用組合類中的所有方法

      Python 命名空間與對象的組合

      圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部圓的面積。圓環的周長是內部圓的周長加上外部圓的周長。

      這個時候,我們就首先實現一個圓形類,計算一個圓的周長和面積。然后在"環形類"中組合圓形的實例作為自己的屬性來用

      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: ????''' ????定義了一個圓環類 ????提供圓環的面積和周長的方法 ????''' ????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)?#實例化一個環形 print(ring.perimeter())?#計算環形的周長 print(ring.area())?#計算環形的面積

      用組合的方式建立了類與組合的類之間的關系,它是一種‘有’的關系,比如教授有生日,教授教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) '''? 運行結果:? 27? python?28000?4?months? '''

      當類之間有顯著不同,并且較小的類是較大的類所需要的組件時,用組合比較好

      軟件開發 人工智能 云計算 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:爬蟲技術不只是用來抓數據
      下一篇:2020華為開發者大賽秋季賽IoT賽道,百萬大獎邀您報名
      相關文章
      亚洲男人天堂av| 亚洲欧美成人一区二区三区| 亚洲欧美自偷自拍另类视| 亚洲精品乱码久久久久久下载 | 亚洲成色WWW久久网站| 亚洲一级片内射网站在线观看| 国产午夜亚洲精品不卡电影| 亚洲中文字幕无码mv| 亚洲综合校园春色| 亚洲国产激情在线一区| 久久精品国产亚洲av麻豆图片| 亚洲一区二区三区亚瑟| 久久精品国产99国产精品亚洲| ass亚洲**毛茸茸pics| 中文字幕在线观看亚洲视频| 中文字幕在线日亚洲9| 亚洲成a人片在线不卡一二三区| 色天使色婷婷在线影院亚洲| 欧洲亚洲国产精华液| 国产亚洲精品91| 亚洲免费无码在线| 亚洲一区无码中文字幕| 亚洲国产精品无码av| 亚洲五月六月丁香激情| 亚洲精品中文字幕乱码| 亚洲成a人片在线看| 亚洲国产区男人本色| 亚洲AⅤ视频一区二区三区| 亚洲精品高清一二区久久| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 涩涩色中文综合亚洲| 亚洲私人无码综合久久网| 亚洲av无码专区亚洲av不卡| 日韩色日韩视频亚洲网站| 日日摸日日碰夜夜爽亚洲| 亚洲精品线路一在线观看| 亚洲精品蜜桃久久久久久| 亚洲欧洲在线观看| 亚洲an日韩专区在线| 亚洲成aⅴ人片久青草影院按摩 | 伊人久久综在合线亚洲2019|