欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python內(nèi)置方法和屬性應(yīng)用:反射和單例(推薦)

 更新時(shí)間:2020年06月19日 10:36:04   作者:wedo實(shí)驗(yàn)君  
這篇文章主要介紹了Python內(nèi)置方法和屬性應(yīng)用:反射和單例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1. 前言

python除了豐富的第三方庫(kù)外,本身也提供了一些內(nèi)在的方法和底層的一些屬性,大家比較常用的如dict、list、set、min、max、range、sorted等。筆者最近在做項(xiàng)目框架時(shí)涉及到一些不是很常用的方法和屬性,在本文中和大家做下分享。

2. 內(nèi)置方法和函數(shù)介紹  

enumerate

如果你需要遍歷可迭代的對(duì)象,有需要獲取它的序號(hào),可以用enumerate, 每一個(gè)next返回的是一個(gè)tuple

list1 = [1, 2, 3, 4] 
 list2 = [4, 3, 2, 1] 
 for idx, value in enumerate(list1): 
 print(idx, value, list2[idx]) 
 # 0 1 4 
 # 1 2 3 
 # 2 3 2 
 # 3 4 1 

 zip zip從參數(shù)中的多個(gè)迭代器取元素組合成一個(gè)新的迭代器; 

# 給list加上序號(hào) 
 b = [4, 3, 2, 1] 
 for i in zip(range(len(b)), b): 
 print(i) 
 # (0, 4) 
 # (1, 3) 
 # (2, 2) 
 # (3, 1) 
  •  globals():一個(gè)描述當(dāng)前執(zhí)行過(guò)程中全局符號(hào)表的字典,可以看出你執(zhí)行的所有過(guò)程
  •  id(object):python對(duì)象的唯一標(biāo)識(shí)
  •  staticmethod 類靜態(tài)函數(shù)注解    
@staticmethod 
 def test(): 
 print('this is static method') 
 Foo.test = test 
 Foo.test() 

 類的屬性 我們來(lái)看下一個(gè)類的申明,如下:   

class Foo(): 
 """this is test class""" 
 def __init__(self, name): 
 self.name = name 
 def run(self): 
 print('running') 
# 列出類的所有成員和屬性 
 dir(Foo) 
 ['__class__', 
 '__delattr__', 
 '__dict__', 
 '__dir__', 
 '__doc__', 
 '__eq__', 
 '__format__', 
 '__ge__', 
 '__getattribute__', 
 '__gt__', 
 '__hash__', 
 '__init__', 
 '__init_subclass__', 
 '__le__', 
 '__lt__', 
 '__module__', 
 '__ne__', 
 '__new__', 
 '__reduce__', 
 '__reduce_ex__', 
 '__repr__', 
 '__setattr__', 
 '__sizeof__', 
 '__str__', 
 '__subclasshook__', 
 '__weakref__', 
 'run'] 
 # 類的注釋 
 Foo.__doc__ 
 # 'this is test class' 
 # 類自定義屬性 
 Foo.__dict__ 
 mappingproxy({'__module__': '__main__', 
 '__doc__': 'this is test class', 
 '__init__': <function __main__.Foo.__init__(self, name)>, 
 'run': <function __main__.Foo.run(self)>, 
 '__dict__': <attribute '__dict__' of 'Foo' objects>, 
 '__weakref__': <attribute '__weakref__' of 'Foo' objects>}) 
 # 類的父類 
 Foo.__base__ 
 # 類的名字 
 Foo.__name__ 

類的實(shí)例化和初始化

# python類先通過(guò)__new__實(shí)例化,再調(diào)用__init__進(jìn)行初始化類成員 
 foo = Foo('milk') 

類的屬性添加和訪問(wèn)

# 類的訪問(wèn) 
 foo.name 
 foo.run() 
 # 可以通過(guò)setattr 動(dòng)態(tài)的添加屬性 
 def method(): 
 print("cow") 
 setattr(foo, "type", "cow") 
 setattr(foo, "getcow", method) 
 # cow 
 foo.type 
 foo.getcow() 
 # 動(dòng)態(tài)刪除屬性 delattr 
 delattr(foo, "type") 
 # getattr 獲取成員屬性 
 if hasattr(foo, "run"): # 判斷是否有屬性 
 func = getattr(foo, "run") 
 func() 

3. 單例模式應(yīng)用

單例模式(Singleton Pattern)是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一。單例模式要求在類的使用過(guò)程中只實(shí)例化一次,所有對(duì)象都共享一個(gè)實(shí)例。創(chuàng)建的方法是在實(shí)例的時(shí)候判斷下是否已經(jīng)實(shí)例過(guò)了,有則返回實(shí)例化過(guò)的全局實(shí)例。python是如何實(shí)現(xiàn)的呢?關(guān)鍵是找到實(shí)例化的地方,對(duì)就是前面說(shuō)的__new__

class Singleton(object): 
 def __new__(cls, *args, **kwargs): 
 if not hasattr(cls, '_instance'): 
 cls._instance = object.__new__(cls) 
 return cls._instance 
 def __init__(self, name): 
 self.name = name 
a = Singleton('name1') 
b = Singleton('name2') 
print(id(a), id(b)) 
print(a.name, b.name) 
# 1689352213112 1689352213112 
# name2 name2 

4. 反射應(yīng)用

反射在許多框架中都有使用到,簡(jiǎn)單就是通過(guò)類的名稱(字符串)來(lái)實(shí)例化類。一個(gè)典型的場(chǎng)景就是通過(guò)配置的方式來(lái)動(dòng)態(tài)控制類的執(zhí)行,比如定時(shí)任務(wù)的執(zhí)行,通過(guò)維護(hù)每個(gè)定時(shí)任務(wù)類的執(zhí)行時(shí)間,在執(zhí)行時(shí)間到的時(shí)候,通過(guò)反射方式實(shí)例化類,執(zhí)行任務(wù),在java中也非常的常見(jiàn)。

python的實(shí)現(xiàn)可以通過(guò)上面說(shuō)的getattr獲取模塊中的類, 通過(guò)methodcaller來(lái)調(diào)用方法。我們來(lái)看一個(gè)簡(jiǎn)單的例子

import importlib 
from operator import methodcaller 
class Foo(): 
 """this is test class""" 
 def __init__(self, name): 
 self.name = name 
 def run(self, info): 
 print('running %s' % info) 
# 類所在的模塊,默認(rèn)情況__main__, 可以通過(guò)Foo.__dict__ 中'__module__'獲取 
api_module = importlib.import_module('__main__') 
# getattr獲取模塊中的類, 這里Foo是字符串哦 
clazz = getattr(api_module, 'Foo') 
# 實(shí)例化 
params = ["milk"] 
instance = clazz(*params) 
# 方法調(diào)用, 方法也是字符串methodcaller(方法名, 方法參數(shù)) 
task_result = methodcaller("run", "reflection")(instance) 
# running reflection 

5. 總結(jié)

本文通過(guò)分享了python內(nèi)置方法和屬性, 并在單例模式和反射中進(jìn)行應(yīng)用。希望對(duì)你有幫助,歡迎交流@mintel 要點(diǎn)總結(jié)如下:

  • dir下類
  •  查看類自定義屬性__dict__
  •  __new__實(shí)例化類,__init__初始化類
  •  getattr 獲取屬性
  •  setattr 設(shè)置屬性
  •  記住importlib和methodcaller

到此這篇關(guān)于Python內(nèi)置方法和屬性應(yīng)用:反射和單例的文章就介紹到這了,更多相關(guān)Python內(nèi)置方法和屬性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 提取dict轉(zhuǎn)換為xml/json/table并輸出的實(shí)現(xiàn)代碼

    Python 提取dict轉(zhuǎn)換為xml/json/table并輸出的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 提取dict轉(zhuǎn)換為xml/json/table并輸出的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-08-08
  • python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏

    python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏

    這篇文章主要為大家詳細(xì)介紹了python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python入門之后再看點(diǎn)什么好?

    Python入門之后再看點(diǎn)什么好?

    看完了基礎(chǔ)書,甚至看兩遍了,但自己寫的時(shí)候還是沒(méi)思路,我該怎么辦?這篇文章主要介紹了Python入門之后再看點(diǎn)什么好,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python實(shí)現(xiàn)簡(jiǎn)單的HttpServer服務(wù)器示例

    Python實(shí)現(xiàn)簡(jiǎn)單的HttpServer服務(wù)器示例

    本篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單的HttpServer服務(wù)器示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Python中jieba庫(kù)的使用方法

    Python中jieba庫(kù)的使用方法

    jieba庫(kù)是一款優(yōu)秀的 Python 第三方中文分詞庫(kù),本文主要介紹了Python中jieba庫(kù)的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python人工智能之sg2im文字轉(zhuǎn)圖像

    Python人工智能之sg2im文字轉(zhuǎn)圖像

    這篇文章主要介紹了Python人工智能中使用sg2im把文字轉(zhuǎn)成圖像的方法,sg2im是一個(gè)由Google開(kāi)發(fā)的開(kāi)源項(xiàng)目,它專注于將場(chǎng)景圖形轉(zhuǎn)換為圖像,借助sg2im就可以把文字轉(zhuǎn)換成圖像,需要的朋友可以參考下
    2021-11-11
  • 盤點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫(kù)神器打造數(shù)據(jù)魔法世界

    盤點(diǎn)20個(gè)Python數(shù)據(jù)科學(xué)庫(kù)神器打造數(shù)據(jù)魔法世界

    數(shù)據(jù)科學(xué)家和分析師常常使用?Python?來(lái)處理數(shù)據(jù)、進(jìn)行分析和可視化,Python生態(tài)系統(tǒng)中有許多庫(kù),但有一些庫(kù)是數(shù)據(jù)科學(xué)家日常工作中必不可少的,本文將深入介紹20個(gè)重要的Python?庫(kù),包括示例代碼和用例
    2024-01-01
  • 使用python爬取4K壁紙保存到本地文件夾的全過(guò)程

    使用python爬取4K壁紙保存到本地文件夾的全過(guò)程

    圖片信息豐富多彩,許多網(wǎng)站上都有大量精美的圖片資源,有時(shí)候我們可能需要批量下載這些圖片,而手動(dòng)一個(gè)個(gè)下載顯然效率太低,所以本文給大家介紹了使用python爬取4K壁紙保存到本地文件夾的全過(guò)程,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3

    Python標(biāo)準(zhǔn)庫(kù)之?dāng)?shù)據(jù)庫(kù) sqlite3

    這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)的數(shù)據(jù)庫(kù) sqlite3的相關(guān)資料,SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù)。它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝”。下面文字將對(duì)其簡(jiǎn)單介紹,需要的小伙伴可以參考下面文章內(nèi)容
    2021-09-09
  • Python求解正態(tài)分布置信區(qū)間教程

    Python求解正態(tài)分布置信區(qū)間教程

    今天小編就為大家分享一篇Python求解正態(tài)分布置信區(qū)間教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論