日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

python-自定义@修饰符

發(fā)布時(shí)間:2025/3/20 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python-自定义@修饰符 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

__new__函數(shù)

在實(shí)例化開(kāi)始之后,在調(diào)用 __init__()方法之前,Python 首先調(diào)用 __new__() 方法

#單例1 class Singleton1(object):_inst=None# 在實(shí)例化開(kāi)始之后,在調(diào)用 __init__() 方法之前,Python 首先調(diào)用 __new__() 方法def __new__(cls,*args, **kwargs):if cls._inst is None:# 如果要得到當(dāng)前類(lèi)的實(shí)例,應(yīng)當(dāng)在當(dāng)前類(lèi)中的 __new__() 方法語(yǔ)句中調(diào)用當(dāng)前類(lèi)的父類(lèi)的 __new__() 方法cls._inst = super(Singleton1, cls).__new__(cls) #相當(dāng)于object.__new__(cls)return cls._inst#單例2 class Singleton2(object):def __new__(cls,*args, **kwargs):if not hasattr(cls,'_inst'):cls._inst = object.__new__(cls)return cls._instif __name__ == '__main__':print(Singleton1())print(Singleton1())print(Singleton2())print(Singleton2()) ''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Person(object):def __init__(self, name, age):self.name = nameself.age = agedef __new__(cls, name, age):if 0 < age < 150: return super(Person, cls).__new__(cls) #return object.__new__(cls)else:return Nonedef __str__(self):return '{0}({1})'.format(self.__class__.__name__, self.__dict__)print(Person('Tom', 10)) print(Person('Mike', 200))

@staticmethod、@classmethod修飾符

我們知道對(duì)于一個(gè)普通的類(lèi),我們要使用其中的函數(shù)的話(huà),需要對(duì)類(lèi)進(jìn)行實(shí)例化,而一個(gè)類(lèi)中,某個(gè)函數(shù)前面加上了staticmethod或者classmethod的話(huà),那么這個(gè)函數(shù)就可以不通過(guò)實(shí)例化直接調(diào)用

  • @staticmethod不需要表示自身對(duì)象的self和自身類(lèi)的cls參數(shù),就跟使用函數(shù)一樣。
    如果在@staticmethod中要調(diào)用到這個(gè)類(lèi)的一些屬性方法,只能直接類(lèi)名.屬性名或類(lèi)名.方法名。
  • @classmethod也不需要self參數(shù),但第一個(gè)參數(shù)需要是表示自身類(lèi)的cls參數(shù)。
    而@classmethod因?yàn)槌钟衏ls參數(shù),可以來(lái)調(diào)用類(lèi)的屬性,類(lèi)的方法,實(shí)例化對(duì)象等,避免硬編碼。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Animal(object):name = 'dog'def __init__(self,name):self.name = namedef intro1(self):print('there is a %s'%(self.name))@staticmethoddef intro2():print('there is a %s')@classmethoddef intro3(cls):print('there is a %s'%(cls.name))Animal('cat').intro1() Animal.intro2() Animal.intro3()

@property修飾符

property使方法像屬性一樣調(diào)用,就像是一種特殊的屬性

有參函數(shù)時(shí),@name.setter

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Animal(object):def __init__(self,name):self.name = name@propertydef intro(self):print('there is a %s eating'%(self.name))@intro.setterdef intro(self,value):print('there is %d %s eating'%(value,self.name))a = Animal('cat') a.intro a.intro=2

@修飾符

從第一個(gè)函數(shù)修飾符開(kāi)始,自下而上做參數(shù)傳遞

#無(wú)參修飾 ,無(wú)參數(shù)時(shí)不需要調(diào)用 def log1(func):func() @log1 def test():print('test:')#有參修飾 def log2(func):def inner(*args, **kwargs):func(*args, **kwargs)return inner @log2 def test(num):print('testlog2:',num,test.__name__) test(20) #相當(dāng)于log(test(20))from functools import wraps #可以看見(jiàn)@wraps可以保證裝飾器修飾的函數(shù)的name的值保持不變#不參數(shù)的裝飾器 def log3(func):@wraps(func)def inner(*args, **kwargs,):func(*args, **kwargs)return inner @log3 def test(num):print('testlog3:',num,test.__name__) test(30) #相當(dāng)于log(test(30))

@pysnooper修飾符

日志打印工具,用顯示函數(shù)間的入?yún)⒑头祷刂档淖兓?/p> ''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' import pysnooper@pysnooper.snoop() #@pysnooper.snoop('log.log') def lisy(a):b=[x - 10 if x in [11, 12, 13] else x for x in a]return b print(lisy([1,2,3,11,12,13,'111',222]))

總結(jié)

以上是生活随笔為你收集整理的python-自定义@修饰符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。