电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:6日期:2022-07-20 13:36:03

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í)行過程中全局符號(hào)表的字典,可以看出你執(zhí)行的所有過程 id(object):python對(duì)象的唯一標(biāo)識(shí) staticmethod 類靜態(tài)函數(shù)注解

@staticmethod def test(): print(’this is static method’) Foo.test = test Foo.test()

類的屬性 我們來看下一個(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類先通過__new__實(shí)例化,再調(diào)用__init__進(jìn)行初始化類成員 foo = Foo(’milk’)

類的屬性添加和訪問

# 類的訪問 foo.name foo.run() # 可以通過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ì)模式之一。單例模式要求在類的使用過程中只實(shí)例化一次,所有對(duì)象都共享一個(gè)實(shí)例。創(chuàng)建的方法是在實(shí)例的時(shí)候判斷下是否已經(jīng)實(shí)例過了,有則返回實(shí)例化過的全局實(shí)例。python是如何實(shí)現(xiàn)的呢?關(guān)鍵是找到實(shí)例化的地方,對(duì)就是前面說的__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)單就是通過類的名稱(字符串)來實(shí)例化類。一個(gè)典型的場(chǎng)景就是通過配置的方式來動(dòng)態(tài)控制類的執(zhí)行,比如定時(shí)任務(wù)的執(zhí)行,通過維護(hù)每個(gè)定時(shí)任務(wù)類的執(zhí)行時(shí)間,在執(zhí)行時(shí)間到的時(shí)候,通過反射方式實(shí)例化類,執(zhí)行任務(wù),在java中也非常的常見。

python的實(shí)現(xiàn)可以通過上面說的getattr獲取模塊中的類, 通過methodcaller來調(diào)用方法。我們來看一個(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__, 可以通過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é)

本文通過分享了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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 路斯特伺服驱动器维修,伦茨伺服驱动器维修|万骏自动化百科 | 洛阳装修公司-洛阳整装一站式品牌-福尚云宅装饰 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 无缝方管|无缝矩形管|无缝方矩管|无锡方管厂家 | 联系我们-腾龙公司上分客服微信19116098882 | 振动筛-交叉筛-螺旋筛-滚轴筛-正弦筛-方形摇摆筛「新乡振动筛厂家」 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 【MBA备考网】-2024年工商管理硕士MBA院校/报考条件/培训/考试科目/提前面试/考试/学费-MBA备考网 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 机床导轨_导轨板_滚轮导轨-上海旻佑精密机械有限公司 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 浙江宝泉阀门有限公司| 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 篮球架_乒乓球台_足球门_校园_竞技体育器材_厂家_价格-沧州浩然体育器材有限公司 | 空心明胶胶囊|植物胶囊|清真胶囊|浙江绿键胶囊有限公司欢迎您! | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 万博士范文网-您身边的范文参考网站Vanbs.com | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | 游泳池设计|设备|配件|药品|吸污机-东莞市太平洋康体设施有限公司 | 螺杆泵_中成泵业| 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 三板富 | 专注于新三板的第一垂直服务平台 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰]-不锈钢法兰-碳钢法兰-法兰盘生产加工厂家-[鼎捷峰] |