python 自定義 修飾符

2021-10-09 22:17:29 字數 4298 閱讀 3279

__new__函式

在例項化開始之後,在呼叫__init__()方法之前,python 首先呼叫__new__()方法

#單例1

class

singleton1

(object):

_inst=

none

# 在例項化開始之後,在呼叫 __init__() 方法之前,python 首先呼叫 __new__() 方法

def__new__

(cls,

*args,

**kwargs)

:if cls._inst is

none

:# 如果要得到當前類的例項,應當在當前類中的 __new__() 方法語句中呼叫當前類的父類的 __new__() 方法

cls._inst =

super

(singleton1, cls)

.__new__(cls)

#相當於object.__new__(cls)

return cls._inst

#單例2

class

singleton2

(object):

def__new__

(cls,

*args,

**kwargs):if

nothasattr

(cls,

'_inst'):

cls._inst =

object

.__new__(cls)

return cls._inst

if __name__ ==

'__main__'

:print

(singleton1())

print

(singleton1())

print

(singleton2())

print

(singleton2(

))

'''

'''class

person

(object):

def__init__

(self, name, age)

: self.name = name

self.age = age

def__new__

(cls, name, age):if

0< age <

150:

return

super

(person, cls)

.__new__(cls)

#return object.__new__(cls)

else

:return

none

def__str__

(self)

:return

'()'

.format

(self.__class__.__name__, self.__dict__)

print

(person(

'tom',10

))print

(person(

'mike'

,200

))

@staticmethod、@classmethod修飾符我們知道對於乙個普通的類,我們要使用其中的函式的話,需要對類進行例項化,而乙個類中,某個函式前面加上了staticmethod或者classmethod的話,那麼這個函式就可以不通過例項化直接呼叫

'''

'''class

animal

(object):

name =

'dog'

def__init__

(self,name)

: self.name = name

defintro1

(self)

:print

('there is a %s'

%(self.name)

) @staticmethod

defintro2()

:print

('there is a %s'

) @classmethod

defintro3

(cls)

:print

('there is a %s'

%(cls.name)

)animal(

'cat'

).intro1(

)animal.intro2(

)animal.intro3(

)

@property修飾符property使方法像屬性一樣呼叫,就像是一種特殊的屬性

有參函式時,@name.setter

'''

'''class

animal

(object):

def__init__

(self,name)

: self.name = name

@property

defintro

(self)

:print

('there is a %s eating'

%(self.name)

) @intro.setter

defintro

(self,value)

:print

('there is %d %s eating'

%(value,self.name)

)a = animal(

'cat'

)a.intro

a.intro=

2

@修飾符從第乙個函式修飾符開始,自下而上做引數傳遞

#無參修飾 ,無引數時不需要呼叫

deflog1

(func)

: func(

)@log1

deftest()

:print

('test:'

)#有參修飾

deflog2

(func)

:def

inner

(*args,

**kwargs)

: func(

*args,

**kwargs)

return inner

@log2

deftest

(num)

:print

('testlog2:'

,num,test.__name__)

test(20)

#相當於log(test(20))

from functools import wraps

#可以看見@wraps可以保證裝飾器修飾的函式的name的值保持不變

#不引數的裝飾器

deflog3

(func)

: @wraps(func)

definner

(*args,

**kwargs,):

func(

*args,

**kwargs)

return inner

@log3

deftest

(num)

:print

('testlog3:'

,num,test.__name__)

test(30)

#相當於log(test(30))

@pysnooper修飾符日誌列印工具,用顯示函式間的入參和返回值的變化

Vue自定義按鍵修飾符

在製作網頁的時候,常常會使用到各種鍵盤事件 例如keyup,當發生鍵盤抬起的事件時,會被觸發,那怎麼讓其只在特定的按鍵抬起時才觸發呢?上個例子 head keydown mi p div let vue1 newvue methods script 上面的例子中,給input繫結了鍵盤事件,當按下鍵...

python 修飾符 python 修飾符

修飾符基礎 閉包 什麼是閉包呢?標準的概念大家可以看wikipedia上的解釋 舉個例子 def do add base def add increase return base increase return add do add函式裡巢狀了乙個內層函式add,這個內層函式就是乙個閉包,其實可以也...

vue3之自定義事件和自定義修飾符

父元件 父元件 text v model name name div template import child from v model子元件 import from vue export default components script style 子元件 子元件 可以通過 emits 選項在...