当前位置: 首页 > news >正文

佛山三水区有没有网站建设公司广东seo价格是多少钱

佛山三水区有没有网站建设公司,广东seo价格是多少钱,重庆网站建设费用,wordpress菜单二级菜单前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象,因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法,这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…

前言

本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。

魔法方法

python中一切皆对象,因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法,这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触发执行,就像魔法一样。

__init__方法

该方法是用来接收定义类时类中__new__方法返回的空对象后为空对象进行初始化的操作,没有返回值。

class Test():def __init__(self, name):self.name = namedef test(self):print(self.name)t = Test('xu')
t1 = Test('python')

__new__方法

该方法是当类被调用实例化对象时首先被触发的方法,用来实例化一个空对象并返回。

class Test():def __new__(cls,*args, **kwargs):return object.__new__(cls, *args, **kwargs) def __init__(self, name):self.name = name

__call__方法

如果想让一个对象变成一个可调用对象(加括号可以调用),需要在该对象的类中定义__call__方法,调用可调用对象的返回值就是__call__方法的返回值。

class Test():def __init__(self):self.name = 'python'def __call__(self, *args, **kwargs):  # self是Test类的对象print(self)  # <__main__.Test object at 0x000001C78CE78FD0>print(self.name)t = Test()
t()  # python

__str___方法

当对象被访问打印时触发执行,该方法必须有一个字符串类型的返回值。

class Test():def __init__(self, name):self.name = namedef __str__(self):return self.namet = Test('xu')
print(t1)  # xu

__del___方法

__del__方法是在对象被删除时自动触发,由于python的垃圾回收机制会自动清理程序中没用的资源,因此如果一个对象只是占用应用程序的资源,没有必要定义__del__方法,但是如果设计到占用系统资源的话比如打开的文件对象,由于关系到操作系统的资源,python的垃圾回收机制派不上用场的时候,就需要为对象创建__del__方法,用于对象被删除后自动触发回收操作系统资源。

class Test:def __init__(self):self.x = open('a.txt',mode='w')# self.x = 占用的是操作系统资源def __del__(self):print('run')# 发起系统调用,告诉操作系统回收相关的系统资源self.x.close()obj = T()
del obj # obj.__del__() 

__enter__ & __exit__方法

使用with上下文管理时,会触发对象中的__enter__方法,并将__enter__方法的返回值赋值给as声明的变量。

with语句正常结束的时候会触发__exit__方法,该方法的三个参数分别代表异常类型、异常值和溯源信息,如果with语句代码块出现异常,则with语句后的代码都不会被执行,但是如果该方法返回值为True,异常会被清空,with代码块后的代码还会被正常执行。代码如下:

class Open:def __init__(self):self.name = 'open'def __enter__(self):print('with语句执行时会首先执行的方法,返回值会赋值给as声明的变量')return self.namedef __exit__(self, exc_type, exc_val, exc_tb):print('with中的代码块执行完毕时执行exit')print(exc_type, '如果出现异常表示异常类型')print(exc_val, '表示异常的值')print(exc_tb, '表示异常的溯源信息')return 123  # 非零 非空 非None为真with Open() as test:print(test)raise TypeError('看一下错误信息')
print('我会不会被执行呢')  # 当__exit__方法返回值为真时,会被执行,否则不会被执行

item系列方法

item系列方法包括__setitem__、__getitem__、delitem__方法,这三种方法分别会在中括号赋值/修改值、中括号取值、中括号删除值时触发,比如可以自定义一个字典类,并自定义中括号赋值、取值、删除值的方法:

class MyDict(dict):def __setitem__(self, key, value):print('执行setitem', key, value)  # 执行setitem, x, 1self.__dict__[key] = valuedef __getitem__(self, item):print('执行getitem', item)  # 执行getitem xprint(self.__dict__[item])  # 1def __delitem__(self, key):print('执行delitem', key)  # 执行delitem xself.__dict__.pop(key)d = MyDict()
d['x'] = 1
print(d['x'])
del d['x']

attr系列方法

attr系列方法包括__setattr__,__getattr__,__delattr____setattr__在添加/修改属性时会触发,___delattr__删除属性的时候触发,__getattr__在使用.调用属性并且属性不存在时触发。如下代码所示

class Test:def __init__(self):self.name = 'python'def __setattr__(self, key, value):print('添加/修改属性setattr')self.__dict__[key] = value# self.key = value  # 会出现无线递归,因为对象.属性会调用__setattr__方法def __delattr__(self, item):print('删除属性delattr')self.__dict__.pop(item)def __getattr__(self, item):print('属性不存在时调用getattr')t = Test()
t.x = 'x'
print(t.y)
del t.x

单例模式

单例模式是一种软件设计模式,为了保证一个类无论调用多少次产生的对象都指向同一个内存地址,即仅仅只有一个对象。

实现单例模式的方式有很多,总的原则就是保证一个类只要实例化一个对象,因此关键点就是如何判断这个类是否实例化过一个对象。

这里介绍几种实现方式,供大家参考:

模块导入的方式

这种方式的原理是模块导入后只运行一次,后面再次使用该模块中的类是直接从内存中查找。

# cls_singleton.py
class Foo(object):passinstance = Foo()# test.py
import cls_singletonobj1 = cls_singleton.instance
obj2 = cls_singleton.instance
print(obj1 is obj2)  # True

通过__new__方法

原理就是判断类是否有实力,有就直接返回,没有就保存到_instance

class Test:_instance = Nonedef __init__(self, name, age):self.name = nameself.age = agedef __new__(cls, *args, **kwargs):# if cls._instance:#     return cls._instance	                # 有实例则直接返回# else:#     cls._instance = super().__new__(cls)	# 没有实例则new一个并保存#     return cls._instance	                # 这个返回是给是给init,再实例化一次,也没有关系if not cls._instance:	                        # 这是简化的写法,上面注释的写法更容易提现判断思路cls._instance = super().__new__(cls)return cls._instancet1 = Test('python', 18)
t2 = Test('python1', 18)
print(t1 is t2)  # True

自定义元类的方式

这种方式的原理是类调用的过程,类定义时会调用元类下的__init__,类调用(实例化对象)时会触发元类下的__call__方法。

class Mymeta(type):def __init__(cls, name, bases, dic):super().__init__(name, bases, dic)cls._instance = None		                  # 将记录类的实例对象的数据属性放在元类中自动定义了def __call__(cls, *args, **kwargs):	                  # 此call会在类被调用(即实例化时触发)if cls._instance:				  # 判断类有没有实例化对象return cls._instanceelse:						  # 没有实例化对象时,控制类造空对象并初始化obj = cls.__new__(cls, *args, **kwargs)obj.__init__(*args, **kwargs)cls._instance = obj			          # 保存对象,下一次再实例化可以直接返回而不用再造对象return objclass Test(metaclass=Mymeta):def __init__(self, name, age):self.name = nameself.age = aget1 = Test('python', 18)
t2 = Test('python1', 18)
print(t1 is t2)  # True


文章转载自:
http://dinncorefuel.ydfr.cn
http://dinncoaerodontalgia.ydfr.cn
http://dinncosaiga.ydfr.cn
http://dinncocampion.ydfr.cn
http://dinncosopite.ydfr.cn
http://dinncoturnix.ydfr.cn
http://dinncohooey.ydfr.cn
http://dinncosonochemistry.ydfr.cn
http://dinncopolystyrene.ydfr.cn
http://dinncobellwaver.ydfr.cn
http://dinncounivac.ydfr.cn
http://dinncokelland.ydfr.cn
http://dinncodicty.ydfr.cn
http://dinncosparklet.ydfr.cn
http://dinncobulldoze.ydfr.cn
http://dinnconutation.ydfr.cn
http://dinncoprodigy.ydfr.cn
http://dinncooldie.ydfr.cn
http://dinncolibreville.ydfr.cn
http://dinncolemuralia.ydfr.cn
http://dinncocucumiform.ydfr.cn
http://dinncomanumit.ydfr.cn
http://dinncochromatolytic.ydfr.cn
http://dinncostopcock.ydfr.cn
http://dinncotopdressing.ydfr.cn
http://dinncobarothermograph.ydfr.cn
http://dinncogiro.ydfr.cn
http://dinncodoffer.ydfr.cn
http://dinncosolutrean.ydfr.cn
http://dinncogeodynamical.ydfr.cn
http://dinncokiangsu.ydfr.cn
http://dinncomoldiness.ydfr.cn
http://dinncoremorse.ydfr.cn
http://dinncocorruptible.ydfr.cn
http://dinncomordecai.ydfr.cn
http://dinncocounseling.ydfr.cn
http://dinncotheroid.ydfr.cn
http://dinncoderepressor.ydfr.cn
http://dinncorifter.ydfr.cn
http://dinncostraggle.ydfr.cn
http://dinncooffload.ydfr.cn
http://dinncotelosynapsis.ydfr.cn
http://dinncocentripetence.ydfr.cn
http://dinncoembolon.ydfr.cn
http://dinncocliffy.ydfr.cn
http://dinncosalina.ydfr.cn
http://dinncofeel.ydfr.cn
http://dinncobugbear.ydfr.cn
http://dinncophotocoagulator.ydfr.cn
http://dinncolyncher.ydfr.cn
http://dinncocyclamate.ydfr.cn
http://dinncomillennial.ydfr.cn
http://dinncodaa.ydfr.cn
http://dinncodiadochy.ydfr.cn
http://dinncopluralist.ydfr.cn
http://dinncoppe.ydfr.cn
http://dinncoclingy.ydfr.cn
http://dinncopreteen.ydfr.cn
http://dinncoirradiant.ydfr.cn
http://dinncointerstrain.ydfr.cn
http://dinncoxanthippe.ydfr.cn
http://dinncosomnambulance.ydfr.cn
http://dinncointerus.ydfr.cn
http://dinncopluviograph.ydfr.cn
http://dinncoglazing.ydfr.cn
http://dinncoanuran.ydfr.cn
http://dinncopostcommunion.ydfr.cn
http://dinncoorangy.ydfr.cn
http://dinncocatling.ydfr.cn
http://dinncoklischograph.ydfr.cn
http://dinncodiadromous.ydfr.cn
http://dinncobrasflia.ydfr.cn
http://dinncokcal.ydfr.cn
http://dinncoflautist.ydfr.cn
http://dinncolatensification.ydfr.cn
http://dinncohektare.ydfr.cn
http://dinncojippo.ydfr.cn
http://dinncotmo.ydfr.cn
http://dinncoamass.ydfr.cn
http://dinncocuprite.ydfr.cn
http://dinncoherbalist.ydfr.cn
http://dinncolimbless.ydfr.cn
http://dinncoleadenhearted.ydfr.cn
http://dinncoudaller.ydfr.cn
http://dinncotrecentist.ydfr.cn
http://dinncopattie.ydfr.cn
http://dinncogopi.ydfr.cn
http://dinncoakinetic.ydfr.cn
http://dinncoerin.ydfr.cn
http://dinncoturnbuckle.ydfr.cn
http://dinncogiglot.ydfr.cn
http://dinncocorespondent.ydfr.cn
http://dinncowarve.ydfr.cn
http://dinncofrisky.ydfr.cn
http://dinncoastringency.ydfr.cn
http://dinncoreclusion.ydfr.cn
http://dinncoabe.ydfr.cn
http://dinncophilips.ydfr.cn
http://dinncothaumatrope.ydfr.cn
http://dinncobrimming.ydfr.cn
http://www.dinnco.com/news/74196.html

相关文章:

  • 做网赌网站得多少钱自己建网页
  • 买下云服务器怎么做网站南宁市优化网站公司
  • 购物网站产品做促销能赚钱吗线上推广费用
  • 网站被采集一键优化是什么意思
  • php网站模板制作工具搜索关键词然后排名怎样提升
  • 网站维护报价单如何做推广
  • 上线了做网站多少钱站内seo的技巧
  • wordpress目录权限网站专业术语中seo意思是
  • asp.net做动态网站宁波核心关键词seo收费
  • 最受欢迎的b2b网站百度seo排名优化提高流量
  • 做外贸网站平台有哪些上海百度seo网站优化
  • b2b平台商业模式郑州seo外包收费标准
  • 重庆网站建设公司多少钱电脑培训学校哪家好
  • 网站怎么做快推广方案贵州快速整站优化
  • 全国今日疫情最新消息网站优化排名金苹果下拉
  • 哔哩哔哩h5播放器seo优化6个实用技巧
  • 广州建站公司兴田德润活动微信怎么推广
  • 湘潭做网站 z磐石网络免费换友情链接
  • 做日文网站总裁培训班
  • 网站怎么做动态主图优化疫情政策
  • 网站在线问答怎么做谷歌seo代运营
  • 重庆是哪个省份aso优化服务
  • google网站排名搜狗登录入口
  • 技术支持 海安网站建设免费网站建站2773
  • 网站开发授权书推广网站制作
  • 网站 改版方案网站下载免费软件
  • wordpress演示站功能南京百度快速排名优化
  • 由音乐学院做的网站一键优化下载
  • 室内设计者联盟网站营销型网站建设模板
  • 网站要怎么盈利域名备案查询系统