04python入門 物件導向初識

2021-10-02 17:26:35 字數 4083 閱讀 5616

類與物件

classmethod類方法

staticmethod靜態方法

物件、子類判斷

反射

核心是過程 流水線思維

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

缺點是:一套流水線或者流程就是用來解決乙個問題,**牽一髮而動全身。

應用場景:一旦完成基本很少改變的場景,著名的例子有linux核心,git。

物件導向的程式設計的核心是物件,只要結果,不管你是如何執行的

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

缺點:可控性差,無法向面向過程的程式設計流水線式的可以很精準的**問題的處理流程與結果,存在不同改寫、繼承,有事對子物件的改寫會影響全域性

class 類名:

def__init__

(self,引數1

,引數2):

self.物件的屬性1

= 引數1

self.物件的屬性2

= 引數2

def 方法名(self)

:pass

def 方法名2

(self)

:pass

例項物件 = 類名(1,

2)#物件的例項化

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

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

def __init__(self): 這句話可以寫也可以不寫,只要有引數參進來的時候就必須得寫;

self:在例項化時自動將物件/例項本身傳給__init__的第乙個引數

print(person.__name__,type(person.__name__)) #檢視類的名字(這裡的類名是字串型別的)

print(person.__dict__) #查出的是乙個字典,key為屬性名,value為屬性值

print(person.__doc__)# 就是把注釋顯示出來

print(dir(person)) #檢視類的方法,以列表的形式顯示出來

print(person.__module__) #類定義所在的模組

print(person.__class__)

print(isinstance(hy,person))#判斷物件 是否是類的例項

組合:組合指的是,在乙個類中以另外乙個類的物件(也就是例項)作為資料屬性,稱為類的組合

class

jinneng

:def

change

(self, obj)

:# 功能是變身

obj.height +=

1000

# 變高1000

class

person

:# 定義乙個人類

role =

'person'

# 人的角色屬性都是人

def__init__

(self, name)

: self.name = name

# 能變身

self.weapon = weapon(

)

me= person(

'egon'

)me.weapon.change(

)# me組合技能變身了

classmethod 修飾符對應的函式不需要例項化,不需要 self 引數,但第乙個引數需要是表示自身類的 cls 引數,可以來呼叫類的屬性,類的方法,例項化物件等。

classa(

object):

bar =

1def

func1

(self)

:print

('foo'

) @classmethod

deffunc2

(cls)

:print

('func2'

)print

(cls.bar)

cls(

).func1(

)# 呼叫 foo 方法

a.func2(

)# 不需要例項化就能呼叫

classc(

object):

@staticmethod

deff()

:print

('runoob');

c.f();

# 靜態方法無需例項化

cobj = c(

)cobj.f(

)# 也可以例項化後呼叫

isinstance(obj,cls):檢查obj是不是cls的物件(傳兩個引數,乙個是物件,乙個是類)

issubclass(sub,super):檢查sub是不是super的子類(傳兩個引數,乙個是子類,乙個是父類)

hasattr:hasattr(object,name)判斷乙個物件是否有name屬性或者name方法。有就返回true,沒有就返回false

getattr:獲取物件的屬性或者方法,如果存在則列印出來。hasattr和getattr配套使用

需要注意的是,如果返回的是物件的方法,返回出來的是物件的記憶體位址,如果需要執行這個方法,可以在後面新增一對()

setattr:給物件的屬性賦值,若屬性不存在,先建立後賦值

delattr:刪除該物件指定的乙個屬性

class

foo:

def__init__

(self)

: self.name =

'egon'

self.age =

51def

func

(self)

:print

('hello'

)egg = foo(

)print

(hasattr

(egg,

'name'))

#先判斷name在egg裡面存在不存在

print

(getattr

(egg,

'name'))

#如果為true它才去得到

print

(hasattr

(egg,

'func'))

print

(getattr

(egg,

'func'))

#得到的是位址

# getattr(egg,'func')() #在這裡加括號才能得到,因為func是方法

ifhasattr

(egg,

'func'):

getattr

(egg,

'func')(

)else

:print

('沒找到'

)

class

foo:

f =123 @classmethod

defclass_method_dome

(cls)

:print

('class_method_dome'

) @staticmethod

defstatic_method_dome()

:print

('static_method_dome'

)print

(hasattr

(foo,

'class_method_dome'))

method =

getattr

(foo,

'class_method_dome'

)method(

)print

('------------'

)print

(hasattr

(foo,

'static_method_dome'))

method1 =

getattr

(foo,

'static_method_dome'

)method1(

)

Python入門 物件導向

物件 有具體特徵和行為操作的事物 有具體 特徵 屬性和 行為 方法的物件 將物件行為特徵抽象化用 表示 1 還原生活場景 簡單的 操作 基礎語法,堆疊功能 變數 資料型別 運算 if while 函式式程式設計 將所有要處理的事情,開始封裝成具備一定處理功能的函式,呼叫執行 2 面向過程程式設計 開...

快速入門物件導向設計

物件導向設計把握乙個重要的經驗 誰擁有資料,誰就對外提供操作這些資料的方法。幾個典型的案例 人在黑板上畫圓 有人物件 黑板物件 圓物件,畫圓這個動作必須用到了圓心座標x y和半徑r,而x y r是圓內部的資料,圓擁有這些資料,所以這個動作時圓的,而不是黑板的,更不是人的。列車司機緊急剎車 有列車物件...

Java入門 物件導向一

物件導向與面向過程 面向過程 線性思維,事物比較簡單 物件導向 簡單的線性思維無法解決,利用大局思維找乙個能解決該問題的物件去解決問題,比如之前的鍵盤錄入就是找到scanner去解決問題。面對物件方便從巨集觀上管理,具體實現還是面向過程的方式。物件和類的關係 類是抽象的,類是確定物件會擁有的特徵 屬...