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

自己做链接网站互联网做视频网站需要许可证吗

自己做链接网站,互联网做视频网站需要许可证吗,网站建设时设置语言选项,深圳微信网站任务 你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。 解决方案 你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中: class _const(object):class ConstEr…

任务

你需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定。

解决方案

你可以把任何对象当做模块一样安装。将下列代码存为一个模块const.py,并放入你的Python的sys.path 指定的目录中:

class _const(object):class ConstError(TypeError):passdef	__setattr__(self,name,value):if name in self.__dict__raise self.ConstError,"Can't rebind const(%s)" %name self.__dict__[name] = valuedef __delattr__self,name):if name in self.__dict__:raise self.ConstError,"Can't unbind  const(%s) %nameraise NameError,name
import sys
sys.modules[__name__] = const()

现在,任何客户代码都可以导入 const,并将const 模块的一个属性绑定一次,但仅能绑定一次,如下:

const.magic = 23

一旦某属性已经被绑定,程序无法将其重新绑定或者解除绑定:

Const.magic = 88#抛出const.ConstError
del const.magic#抛出const.ConstError

讨论

在 Python 中,变量可以被随意绑定,而模块不同于类,你无法定义一个特殊的像__setattr__一样的方法来阻止对它的重新绑定。一个简单的解决办法是像安装模块一样安装对象。

Python 并没有对 sys.modules 的条目做类型检査以确保它们是模块对象。因此,可以在那里安装一个对象,并利用其特殊的属性存取的方法(比如在__getattr__等方法中阻止对属性的处理或者重新绑定),而且客户代码仍然可以通过import somename 来访问这个对象。还可以在更具有 Python 风格的单例模式用法(见6.16节)中看到这种技巧本节解决方案可以确保:当一个模块级别的名字被首次绑定到了一个对象,以后它会始终恒定不变地绑定到同一个对象。本节并没有处理某个对象的不可变性,那是另一个不同的主题。修改一个对象和重新绑定一个名字是完全不同的概念,这些概念在 4.1节中有详细的解释。数字、字符串和元组都是不可改变的:如果你将const中的一个名字绑定到这样的一个对象,那么不仅该名字会始终绑定到此对象,而且对象的内容也会永远保持不变,因为这个对象具有不可变性。但其他对象比如列表和字典则是可变的:如果绑定 const 中的一个名字到一个列表对象,虽然这个名字会始终保持绑定到该列表,但列表的内容却可能发生变化(比如其中的元素可能被重新绑定或者解除绑定我们通过 append 方法也可以给它增加更多的元素,等等)。

关于怎样给可改变的对象制作一个“只读”的封装层的内容,请参考6.5节。可以选择用类_const的__setattr__方法来完成这个封装。假设将6.5节中的代码存为 ro.py模块,并放入你的 Python的sys.path目录。那么,需要在 const.py 模块的开头增加一句:

import ro

并修改类_const的__setattr__方法中的赋值语句 self,__dict__[name] = value,将其改为:

self.__dict__[name] = ro.Readonly(value)

现在,当你将 const 中的属性设置为某值时,实际上只是把只读的封装绑定到了那个值我们通过这个值(对象)的其他的引用,调用相关的修改函数或方法仍然能够修改它当然通过“伪模块”const 的属性无法实现修改。如果你想避免这种“意外地通过其他的引用修改”的情况,需要使用一个拷贝,如同4.1节所解释的那样,这样才能保证没有任何其他引用指向那个值。为了达到这个目的,必须在const.py 模块开始的位置编写这样的代码:

import ro,copy
#并且将类_const中的__setattr_方法改成:
self.__dict__[name] = ro.Readonly(copy.copy(value))

如果你够偏执,你可能还会想用copy.deepcopy 替代最后一段代码中的copy.copy。但是过度谨慎会消耗更多的内存,并损失一些性能。必须根据自己特定的应用需求来仔细衡量这样的举措是否真的有必要。无论你最终的决定是什么,Python已经向我们证明了,它提供了足够的工具和机制来实现我们所需要的不可变性。

本节展示的_const 类,从某种意义来说,它可以被看做是6.3节中展示的 NoNewAttrs类的“补充”。_const 类确保已经被绑定的属性无法被重新绑定,但允许你随意绑定新属性;而 NoNewAttrs 则相反,可以随意地重新绑定那些已经被绑定的属性,但是却禁止绑定任何新的属性。

http://www.dtcms.com/wzjs/576852.html

相关文章:

  • 免费网站建设是什么建设银行代发工资清单网站
  • 无锡网站建设课程软件外包行业
  • 网站的后台管理员系统建设教程wordpress+v4.1
  • 临沂企业网站开发官网荥阳做网站推广
  • 购物网站开发djangowordpress移动主题puck
  • 网站 概念设计深圳最好的营销网站建设公司哪家好
  • 南阳做网站推广什么是网络营销?网络营销有哪些内容?
  • 用网站ip做代理做电商需要知道的几个网站吗
  • 怎么用自己电脑做服务器发布网站学院网站建设分工
  • 怎么做返利网站深圳最好的品牌设计公司
  • 网站权限控制网站重大建设项目公开发布制度
  • 绘本馆借阅网站开发会计培训班要多少钱
  • 宁波企业网站seoit美工做网站
  • 公众号的微网站怎么做上杭网站开发
  • 赣州企业网站建设wordpress仪表盘访问不了
  • 自己做网站除了域名还要买什么网站建设600元全包
  • 河北住房建设厅网站首页网络推广商城网站
  • 学完js了可以做哪些网站常用企业网站模板对比
  • 网站建设网站徒手整形北京app开发网络公司
  • 最低价做网站网站为什么做优化ppt
  • 企业网站建设总体构架少儿编程
  • 惠州网站建设企业营销新闻
  • 新能源 东莞网站建设网上学习做网站
  • 什么东西可以做网站网站开发app
  • 中华建设杂志网站记者建设网站的模板
  • 先做网站还是先解析opencart网站
  • 关键词排名优化网站腾讯企业qq
  • 狗狗和人做网站网站分享插件怎么做
  • 做微商网站的软文wordpress 在线演示
  • 网站建设的大公司门户网站做等保需要备案哪些