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

安美东莞网站建设网站建设搜索优化app推广新闻营销

安美东莞网站建设,网站建设搜索优化app推广新闻营销,沈阳京科医院怎么样,电视剧下载网站 免费糖醋蒜怎样做前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象#xff0c;因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法#xff0c;这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…前言 本文介绍一下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 pythondef __call__(self, *args, **kwargs): # self是Test类的对象print(self) # __main__.Test object at 0x000001C78CE78FD0print(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,modew)# 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 opendef __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 pythondef __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(metaclassMymeta):def __init__(self, name, age):self.name nameself.age aget1 Test(python, 18) t2 Test(python1, 18) print(t1 is t2) # True
http://www.hkea.cn/news/14510615/

相关文章:

  • 贵州建设厅特殊工种考试网站少女前线9a高性能芯片
  • 如何制作局域网站网站云主机
  • 网站做的好的定制鞋子的app
  • 织梦mip网站改造苏省住房和城乡建设厅网站
  • 做自由行的网站找竞价托管公司
  • 房山手机网站建设购物网站建设基本流程
  • 网页设计实验报告精品课程网站运营推广的方式和渠道有哪些
  • 做的漂亮的家居网站有什么网站可以下做闭软件
  • 深圳网站平台制作软件外包公司怎么找业务
  • 网站辅导运营与托管公司谁可以帮我做网站
  • 有公网ip 建网站wordpress 评论添加字段
  • wamp 怎么做两个网站短链接在线工具
  • 德语网站建设注意事项南通网站推广优化费用
  • 做网站时的兼容问题网站开发jquery
  • 站长网站metasploit wordpress
  • 好的手表网站郑州响应式建站
  • 彩票游戏网站建设wordpress主题之家
  • 本地主机做网站用linux系统怎么自己建设网站
  • 机械配件东莞网站建设一站式做网站公司
  • 住建部网站资质查询中宏建设集团营销网站建设实力派易网拓
  • 如何自己做网站做淘宝客专注南京网站建设
  • 西宁网站建设费用星沙网站制作
  • 网站运营技术性高吗二级域名备案流程
  • 爱站数据官网做网站原型的软件
  • 网站产品标签文章标签怎么做卖主机 服务器的网站
  • 小企业网站建设查询网站开发框架系统
  • 做房地产需要做网站吗拉新奖励的app排行
  • 昆明建设路租房信息昆明租房网站北京网站建设设计公司哪家好
  • 怎么开网站详细步骤装修平台网站
  • 做黑龙头像的网站c2c网站管理系统