Python class 類 裝飾器

2021-10-04 02:21:37 字數 3373 閱讀 9537

class

father

:def

__init__

(self,name)

: self.name=name

print

("name: %s"

% self.name)

defgetname

(self)

:return

'father '

+ self.name

class

son(father)

:def

getname

(self)

:return

'son '

+ self.name

if __name__ ==

'__main__'

: son = son(

'runoob'

)print

(son.getname())

執行結果:

name: runoob

son runoob

name屬性在son繼承father語句時,由father物件初始化語句產生的。

class

father

:def

__init__

(self,name)

: self.name=name

print

("name: %s"

% self.name)

defgetname

(self)

:return

'father '

+ self.name

class

son(father)

:def

__init__

(self,name)

:# 重寫父類方法

print

('hi'

) self.name=name

defgetname

(self)

:return

'son '

+ self.name

if __name__ ==

'__main__'

: son = son(

'runoob'

)print

(son.getname())

執行結果:

hison runoob

如果重寫了__init__ 時,例項化子類,就不會呼叫父類已經定義的init

class

father

:def

__init__

(self,):

self.name=

"father"

print

("name: %s"

% self.name)

defgetname

(self)

:return

'father '

+ self.name

class

son(father)

:def

__init__

(self,name)

:super

(son, self)

.__init__(

)print

('hi'

) self.name = name

defgetname

(self)

:return

'son '

+ self.name

if __name__ ==

'__main__'

: son = son(

'runoob'

)print

(son.getname())

執行結果:

name: father

hison runoob

上圖用了supeer(子類名,self).__init__方法呼叫父類

情況總結:
情況一:子類需要自動呼叫父類的方法:子類不重寫__init__()方法,例項化子類後,會自動呼叫父類的__init__()的方法。

情況二:子類不需要自動呼叫父類的方法:子類重寫__init__()方法,例項化子類後,將不會自動呼叫父類的__init__()的方法。

super

(子類,self)

.__init__(引數1,引數2,...

.)class

son(father)

:def

__init__

(self, name)

:super

(son, self)

.__init__(name)

裝飾器
import time

def(func)

:def

new_func

(x):

t = time.time(

) func(x)

print

('cost time='

,(time.time(

)- t)

)return new_func

defhello

(a):

print

(len

([x for x in

range

(a)if x %

2>0]

))hello(

1000000

)# 等價於

(1000000

)def

do_something

(func, x)

:print

(func, x)

defdec

(x):

definner_dec

(f):

do_something(f, x)

return f

return inner_dec

@dec(

123)

deff()

:print

("hello world"

)執行結果:

>

123hello world

process finished with exit code 0

'@dec(123)帶引數,那麼同樣會把123f函式給到dec函式裡面。

Python class類轉字典

有時候會需要從包裝的類裡面取出需要的資料,但有不能直接取出來 可以通過如下 把class轉換成字典 將class轉dict,以 開頭的也要 defprops with obj pr for name in dir obj value getattr obj,name ifnot name.start...

函式裝飾器 類裝飾器

一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...