初始物件導向

2022-02-02 07:58:09 字數 3744 閱讀 4704

一、面向過程:面向過程的程式設計的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麼時候處理什麼東西。

優點:極大地降低了寫成學的複雜度,只需要順著執行的步驟,堆疊**即可

缺點:一套流水線或者流程就是用來解決乙個問題,如果修改**就都得改變

二、物件導向:上帝的思想

優點:解決了程式的擴充套件性。對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙個人物引數的特徵和技能修改都很容易。

缺點:可控性差,無法向面向過程的程式設計流水線式的可以很精準的**問題的處理流程與結果,物件導向的程式一旦開始就由物件之間的互動解決問題,即便是上帝也無法**最終結果。於是我們經常看到乙個遊戲人某一引數的修改極有可能導致陰霸的技能出現,一刀砍死3個人,這個遊戲就失去平衡。

三、類:是具有相同特徵的一類事物(人,狗,老虎)

物件/例項:具體的某一事物

例項化:類到物件的過程(例項=類名(引數1,引數2))

#modelstark.edit 類.函式,呼叫時要傳引數self ,  self.edit例項.方法,呼叫時不用傳引數,預設將self傳入

class person:   #

定義乙個人類

role = '

person'#

人的角色屬性都是人 靜態屬性

def walk(self): #

人都可以走路,也就是有乙個走路方法,也叫動態屬性

print("

person is walking...

")

在python中,用變數表示特徵,用函式表示技能,因而具有相同的特徵和技能的一類事物就是『類』,

物件則是這一類事物中具體的乙個

屬性引用(類名.屬性)

class person:   #定義乙個人類

role = 'person' #人的角色屬性都是人

def walk(self): #人都可以走路,也就是有乙個走路方法

print("person is walking...")

person.job='買賣'      #類新增新的靜態屬性
print(person.role) #檢視人的role屬性 print(person.walk) #引用人的走路方法,注意,這裡不是在呼叫
例項化:類名加括號就是例項化,會自動觸發__init__函式的執行,可以用它來為每個例項定製自己的特徵

class person:   #定義乙個人類

role = 'person' #人的角色屬性都是人

def __init__(self,name):

self.name = name # 每乙個角色都有自己的暱稱;

def walk(self): #人都可以走路,也就是有乙個走路方法

print("person is walking...")

print(person.role) #檢視人的role屬性

print(person.walk) #引用人的走路方法,注意,這裡不是在呼叫

例項化的過程就是類——>物件的過程

原本我們只有乙個person類,在這個過程中,產生了乙個egg物件,有自己具體的名字、攻擊力和生命值。

語法:物件名 = 類名(引數)

egg = person('egon')  #類名()就等於在執行person.__init__()

#執行完__init__()就會返回乙個物件。這個物件類似乙個字典,存著屬於這個人本身的一些屬性和方法。

#你可以偷偷的理解:egg =

檢視屬性&呼叫方法

print(egg.name)     #檢視屬性直接 物件名.屬性名

print(egg.walk()) #呼叫方法,物件名.方法名()

關於self

self:在例項化時自動將物件/例項本身傳給__init__的第乙個引數,你也可以給他起個別的名字,但是正常人都不會這麼做。

因為你瞎改別人就不認識

類屬性的補充

一:我們定義的類的屬性到底存到**了?有兩種方式檢視

dir(類名):查出的是乙個名字列表

類名.__dict__

:查出的是乙個字典,key為屬性名,value為屬性值

二:特殊的類屬性

類名.__name__

#類的名字(字串)

類名.__doc__

#類的文件字串

類名.__base__

#類的第乙個父類(在講繼承時會講)

類名.__bases__

#類所有父類構成的元組(在講繼承時會講)

類名.__dict__

#類的字典屬性

類名.__module__

#類定義所在的模組

類名.__class__

#例項對應的類(僅新式類中)

類屬性的補充

1.物件是關於類而實際存在的乙個例子,即例項

2.物件/例項只有一種作用:屬性引用

egg = person('egon',10,1000)

print(egg.name)

print(egg.aggressivity)

print(egg.life_value)

當然了,你也可以引用乙個方法,因為方法也是乙個屬性,只不過是乙個類似函式的屬性,我們也管它叫動態屬性。

引用動態屬性並不是執行這個方法,要想呼叫方法和呼叫函式是一樣的,都需要在後面加上括號

print(egg.attack)

1

class

類名:2

def__init__

(self,引數1,引數2):

3 self.物件的屬性1 =引數1

4 self.物件的屬性2 =引數256

def 方法名(self):pass78

def 方法名2(self):pass

910 物件名 = 類名(1,2) #

物件就是例項,代表乙個具體的東西11#

類名() : 類名+括號就是例項化乙個類,相當於呼叫了__init__方法12#

括號裡傳引數,引數不需要傳self,其他與init中的形參一一對應13#

結果返回乙個物件

14 物件名.物件的屬性1 #

檢視物件的屬性,直接用 物件名.屬性名 即可

15 物件名.方法名() #

呼叫類中的方法,直接用 物件名.方法名() 即可

小結建立乙個類就會建立乙個類的命名空間,用來儲存類中定義的所有名字,這些名字稱為類的屬性

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

其中類的資料屬性是共享給所有物件的

>>>id(egg.role)

4341594072

>>>id(person.role)

4341594072

而類的動態屬性是繫結到所有物件的

>>>egg.attack

>

>>>person.attack

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

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

物件導向初始

萬物皆物件,物件因關注而產生!設計 分析 問題域 設計類 編碼 定義類 產生 物件 has a 關係 public class boy use a 關係 public class boy public void kiss 建立類,定義類,新增屬性和方法 當乙個類是public的時候,類名與檔名必須保...

初始物件導向

class person role 中國人 類屬性 靜態屬性 defwalk self 這裡的函式叫做方法 動態屬性 注意 self必須寫 print person is walking print person.role 檢視類屬性 print person.walk 檢視類方法 用類名去呼叫方法...

初始物件導向

類 具有相同屬性和技能的一類事物 物件 具體的類的表現,具體的實實在在的的乙個例項 列如.人是一類,某某人就是這個類的乙個物件 物件的角度 ret person 類名 的這個過程 例項化的過程 建立乙個物件的過程 person 例項化物件,例項,物件 print ret 只要類名 產生乙個物件,自動...