__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 選項在...