日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 面向对象(二)

發布時間:2025/3/15 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 面向对象(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python 的面向對象和其他語言不一樣,python的class術語與c++有一定區別,與 Modula-3更像。

1 設計面向對象

設計分成下面的兩個方面,一定要先設計,找好對象,找類

1 面向對象程序設計 OOD
- 找對象-->找類(歸納對象共同的特征和技能,每個對象獨有的特征)
2面向對象程序編程OOP
- 先定義類--實例化對象

1.1 面向對象的作用

可擴展性性強,增加屬性,但是導致了可控性差。

1.2 什么是對象,什么是類

python中一切皆為對象,且python3統一了類與類型的概念,類型就是類。如dict

用面向對象設計一個游戲,每個玩家所有一個英雄,每個英雄都有自己的特征和技能,特征和技能的結合體就是一個對象

從一組對象中提取相似的部分就是所有對象的都具有的特征和技能的結合體

python 中用變量表示特征,用函數表示技能,所以類是變量和函數的結合體,對象是變量與方法(指向類的函數)的結合體

2 初識類

class Data:pass

Python3中的都是新式類,新式類必須繼承至少一個父類

2.1 類的使用

屬性引用和實例化

1 屬性引用(類名.屬性)

class Student:county = 'China' # 共有的特征def __init__(self,ID,NAME,SEX,PROVINCE): # 一個人獨有的特征self.id = IDself.name = NAMEself.sex = SEXself.province = PROVINCEdef search_score(self):print("tell score")def study(self):print('study',self)

```python

Student.county #引用類的數據屬性,該屬性與所有對象/實例共享

2 **實例化(__init__與self)**

類名加括號就是實例化,會自動觸發__init__函數的運行,可以用它來為每個實例定制自己的特征

>>>s1 = Student('121231','aaa','female','beijing') # 默認的self

self的作用是在實例化時自動將對象/實例本身傳給__init__的第一個參數

實例化后就能夠通過s1.的方式進行調用

2.2 對象 (實例)

對象是關于類而實際存在的一個例子,即實例

print(isinstance(s1,Student)) # s1 是Student的實例

2.2.1對象(實例)只有一種作用,就是屬性引用

對象和實例本身只有數據屬性

print(s1.id) print(s1.nickname)

2.2.2綁定方法

對象(實例)本身只有數據屬性,但是Python的class機制會把類的函數綁定到對象上,叫做對象的方法,或者綁定方法
綁定方法唯一綁定一個對象,同一個類的方法綁定到不同的對象上,屬于不同的方法,內存地址不一樣。

print(s1.search_score) # 對象的綁定方法

bound method Student.search_score of <main.Student object at 0x00000000028F46A0

print(Student.search_score) # 對象的綁定方法search_score實際是類的函數的功能,兩者是一種綁定關系

function Student.search_score at 0x00000000028EBBF8

對象的綁定方法的特別之處在于:obj.func()會把obj傳給func的第一個參數。

就是把s1傳遞給了Stdent類

綁定方法是唯一綁定到一個對象身上,不是共享的

2.2.3 對象之間的交互

class Riven:camp = 'Noxus'def __init__(self,nickname,agressiviry=54,life_value=114):self.nick = nicknameself.agre= agressiviryself.life_value = life_valuedef attack(self,enemy):print("%s is attack %s" %(self.nick,enemy))enemy.life_value -=self.agre# 根據自己的攻擊力,攻擊敵人,敵人的生命值就會減少class Garen:camp = 'Noxus'def __init__(self,nickname,agressiviry=54,life_value=114):self.nick = nicknameself.agre = agressiviryself.life_value = life_valuedef attack(self,enemy):print("%s is attack %s" %(self.nick,enemy))enemy.life_value -=self.agre # 根據自己的攻擊力,攻擊敵人,敵人的生命值就會減少#實例化一個Riven r1 = Riven("aaa") # 實例化一個Riven g1 = Garen("bbb") # 實例化一個Garen # print(g1.life_value) # # print(g1.nickname) # print(g1.agressivity) g1.attack(r1) # 交互式攻擊 g1攻擊g2 print(r1.life_value) # 好看敵人的生命值已經減少

2.3 類的名稱空間與對象(實例)的名稱空間

類的名稱空間

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

類有兩種屬性數據屬性和函數屬性

類的數據屬性共享給所有對象的

print(id(r1.camp)) #本質就是在引用類的camp屬性,二者id一樣 print(id(Garen.camp))

結果:
43227208
43227208

而類的屬性是綁定到所有的對象

print(id(r1.attack)) print(id(Riven.attack))

結果:
34910088
36486272

r1.attack就是在執行Riven.attack的功能,python的class機制會將Riven的函數屬性attack綁定給r1,r1相當于拿到了一個指針,指向Riven類的attack功能

除此之外r1.attack()會將r1傳給attack的第一個參數

對象(實例)名稱空間

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

在obj.name會先從obj自己的名稱空間里找name,找不到則去類中找,類也找不到就找父類...最后都找不到就拋出異常

2 基于面向對象設計程序

要嚴格按照下面的流程:

1 面向對象程序設計 OOD
- 找對象-->找類(歸納對象共同的特征和技能,每個對象獨有的特征)
2面向對象程序編程OOP
- 先定義類--實例化對象

要針對當前的額應用場景

對象:學校--->歸類
共有的特征:商標
共有的技能:招生
獨有的特征:地址,老師們 、課程
```python
class School:
tag

對象:老師
共有的特征:無
共有的技能:授課
獨有的特征:名字,level,課程

對象:學生
共有的特征:
共有的技能:search_score,handin
獨有的特征:name,id,

# 對象:學校--->歸類 # 共有的特征:商標 # 共有的技能:招生 # 獨有的特征:地址,老師們 、課程 class School:tag = 'xuexiao'def __init__(self,addr):sell.addr = addrself.teach_list = [] # 直接在這里新建一個空的列表self.course=[] #新建一個課程的列表def zhaosheng(self):pass # 對象:老師 # 共有的特征:無 # 共有的技能:授課 # 獨有的特征:名字,level,課程 class Teacher:def __init__(self,name,level,course):self.name = nameself.level = levelself.course = coursedef teach(self):pass# 對象:學生 # 共有的特征: # 共有的技能:search_score,handin 課程 # 獨有的特征:name,id,class Student:def __init__(self,ID,name,sex):self.id = IDself.name = nameself.sex = sexself.course_list= []def search(self):passdef handin(self):pass# 定義一個課程的類 class Course:def __init__(self,name,price,period):self.name = nameself.price = priceself.period = periods1 = Student('1123','aaa','female') # # s1.course_list.append('python') # s1.course_list.append('linux') # print(s1.course_list)python_obj = Course("python",10000,'5m') linux_obj = Course('python',2200,'2m')s1.course_list.append(python_obj) # 直接添加的是Course的類 s1.course_list.append(linux_obj) print(s1.course_list[0].name) # s1.course_list[0]取到的是Python_obj print('''student name is :%s student price is :%s student period is :%s'''%(s1.course_list[0].name,s1.course_list[0].price,s1.course_list[0].period))

轉載于:https://www.cnblogs.com/Python666/p/6722822.html

總結

以上是生活随笔為你收集整理的Python 面向对象(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。