Python的靜態方法 類方法 屬性方法和魔法方法

2021-10-07 02:48:42 字數 3660 閱讀 4479

1、靜態方法

作用:靜態方法可以更好的組織**,防止**變大後變得比較混亂。

特性:靜態方法只是名義上歸類管理,實際上在靜態方法裡訪問不了類或則例項中的任何屬性

靜態方法使用場景:

(1)我們要寫乙個只在類中執行而不在例項中執行的方法.

(2)經常有一些跟類有關係的功能但在執行時又不需要例項和類參與的情況下需要用到靜態方法.

(3)比如更改環境變數或者修改其他類的屬性等能用到靜態方法.

(4)這種情況可以直接用函式解決, 但這樣同樣會擴散類內部的**,造成維護困難.

呼叫方式: 既可以被類直接呼叫,也可以通過例項呼叫

@staticmethod靜態方法:

lass dog(

object):

def__init__

(self,name)

: self.name = name

@staticmethod

defeat()

:print

("i am a static method"

)d = dog(

"chenronghua"

)d.eat(

)#方法1:使用例項呼叫

dog.eat(

)#方法2:使用類直接呼叫

2、類方法

作用: 無需例項化直接被類呼叫

特性: 類方法只能訪問類變數,不能訪問例項變數

類方法使用場景: 當我們還未建立例項,但是需要呼叫類中的方法

呼叫方式: 既可以被類直接呼叫,也可以通過例項呼叫

@classmethod類方法

class

dog(

object):

name =

'類變數'

#在這裡如果不定義類變數僅定義例項變數依然報錯

def__init__

(self,name)

: self.name =

'例項變數'

self.name = name

@classmethod

defeat

(self,food)

:print

("%s is eating %s"

%(self.name,food)

)dog.eat(

'baozi'

)#方法1:使用類直接呼叫

d = dog(

"chenronghua"

)

d.eat(

"包子"

)#方法2:使用例項d呼叫

3、屬性方法

作用: 屬性方法把乙個方法變成乙個屬性,隱藏了實現細節,呼叫時不必加括號直接d.eat即可呼叫self.eat()方法

例1:@property屬性方法:

class

dog(

object):

def__init__

(self, name)

: self.name = name

@property

defeat

(self)

:print

(" %s is eating"

% self.name)

d = dog(

"chenronghua"

)d.eat(

)# 呼叫會出以下錯誤, 說nonetype is not callable, 因為eat此時已經變成乙個靜態屬性了,

# 不是方法了, 想呼叫已經不需要加()號了,直接d.eat就可以了

例2:航空公司具體例項:

class

flight

(object):

def__init__

(self,name)

: self.flight_name = name

defchecking_status

(self)

:print

("checking flight %s status "

% self.flight_name)

return

1 @property

defflight_status

(self)

: status = self.checking_status(

)if status ==0:

print

("flight got canceled..."

)elif status ==1:

print

("flight is arrived..."

)elif status ==2:

print

("flight has departured already..."

)else

:print

("cannot confirm the flight status...,please check later"

)f = flight(

"ca980"

)f.flight_status

python中的魔法方法

魔法方法就是可以給你的類增加魔力的特殊方法,如果你的物件實現(過載)了這些方法中的某乙個,那麼這個方法就會在特殊的情況下被 python所呼叫,你可以定義自己想要的行為,而這一切都是自動發生的。它們經常是兩個下劃線包圍來命名的(比如 init,lt),python的魔法方法是非常強大的,所以了解其使用方法也變得尤為重要!

1.init(self[, …]),new(cls[, …]),del(self)

init 構造器,當乙個例項被建立的時候初始化的方法。但是它並不是例項化呼叫的第乙個方法,__new__才是例項化物件呼叫的第乙個方法,它只取下cls引數,並把其他引數傳給 init。__new__很少使用,但是也有它適合的場景,尤其是當類繼承自乙個像元組或者字串這樣不經常改變的型別的時候。

new

1

. __new__ 是在乙個物件例項化的時候所呼叫的第乙個方法

2. 它的第乙個引數是這個類,其他的引數是用來直接傳遞給 __init__ 方法

3. __new__ 決定是否要使用該 __init__ 方法,因為 __new__ 可以呼叫其他類的構造方法或者直接返回別的例項物件來作為本類的例項,如果 __new__ 沒有返回例項物件,則 __init__ 不會被呼叫

4. __new__ 主要是用於繼承乙個不可變的型別比如乙個 tuple 或者 string

5. __new__ return的是乙個構建的例項

init

構造器,當乙個例項物件被定義時呼叫
del:

析構器,當刪除乙個例項物件時呼叫

Python 靜態方法,類方法,屬性方法

1.靜態方法 靜態方法 只是名義上歸類管理,實際上在靜態方法中訪問不了類和例項 class person object def init self name self.name name staticmethod 截斷類與函式關係,不能呼叫類變數 def eat print s is eating ...

python類方法 靜態方法 屬性方法

staticmethod和 classmethod都可以直接類名.方法名 來呼叫,那他們有什麼區別呢?從它們的使用上來看 staticmethod不需要表示自身物件的self和自身類的cls引數,就跟使用函式一樣。classmethod也不需要self引數,但第乙個引數需要是表示自身類的cls引數。...

Python中類的方法屬性與方法屬性的動態繫結

最近在 學習python 純粹是自己的興趣愛好,然而並沒有系統地看python 程式設計書籍,覺得上面描述過於繁瑣,在 找了一些學習的 發現廖雪峰老師的 上面的學習資源很不錯,而且言簡意賅,提取了一些 python python 的執行 缺點就是沒有系統的看 python 的書籍,不能及時的將知識的...