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

工信部 网站备案规定网站开发的缺点

工信部 网站备案规定,网站开发的缺点,大连搜狗,电子商务主要学什么就业方向及前景Python 利用模块实现单例模式 在GOF的23种设计模式中#xff0c;单例是最常使用的模式#xff0c;通过单例模式可以保证系统中 一个类只有一个实例而且该实例易于被外界访问#xff0c;从而方便对实例个数的控制并节约系统资 源。每当大家想要实现一个名为XxxMangcr的类时单例是最常使用的模式通过单例模式可以保证系统中 一个类只有一个实例而且该实例易于被外界访问从而方便对实例个数的控制并节约系统资 源。每当大家想要实现一个名为XxxMangcr的类时往往意味着这是一个单例。在游戏编程 中尤是如此比如一个名为World的单例管理着游戏中的所有资源包括一个名为Sun的单 例它给这个世界带来了光亮。 单例如此常见所以有不少现代编程语言将其加到了语言特性中如scala和falcon语 言都把object定义成关键同并用其声明单例。如在scala中—个单例如下 object Singleton{ def show println(“I am a singleton”) } object定义了一个名为Singleton的单例它满足单例的3个需求一是只能有一个实 例二是它必须自行创建这个实例三是它必须自行向整个系统提供这个实例3对于第三点. 在任何地方都可以通过调用Singleton.show()来验证。在scala中单例没有显式的初始化操 作.但并不是所有在语法层面支持单例模式的编程语言都如此比如falcon就不一样。 object object_name [ from classl, class2 … classN] property__l expression property_2 expression … property_N expression [init block] function method_l( [parameter_list]) [method_body] end function method_N(lparameter_list]) [method_body] end end 上面是falcon语言的单例语法[init block]能够让程序员手动控制单例的初始化代码。但是与scala和falcon相比动态语言Python就没有那么方便了主要原因是Python缺乏声 明私有构造函数的语法元素实例又带有类型信息。比如以下方法是不可行的 class _Singleton(object): pass Singleton _Singleton() del _Singleton # 试图刪除 class 定义 another Singleton.class() # 没用,绕过! print(type(another)) #输出 class ‘main._Singleton’ 可见虽然把Singleton的类定义删除了但仍然有办法通过己有实例的__class__属性生成一个新的实例。于是许多Pythonista把目光聚集到真正创建实例的方法__new__上并做起了文章。 class Singleton(object): _instance None def new(cls, *args, **kwargs): if not cls._instance: cls._instance super (Singleton, cls).new(cls,*args,**kwargs) return cls._instance if name “mian”: s1Singleton() s2Singleton() assert id(s1) id(s2) 这个方法很好地解决了前面的问题现在基本上可以保证“只能有一个实例”的要求了 但是在并发情况下可能会发生意。为了解决这个问题引入一个带锁的版本。 import threading class Singleton(object): objs () objs_locker threading.Lock() def new(cls, *args, **kv): if cls in cls.objs: return cls.objs[cls] cls.objs_locker.acquire() try: if cls in cls.objs: ## double check locking return cls.objs[cls] cls.objs[cls] object.new(cls) finally: cls.objs_locker.release() 利用经典的双检査锁机制确保了在并发环境下Singleton的正确实现。但这个方案并 不完美至少还有以下两个问题 如果Singleton的子类重载了 new()方法会覆盖或者干扰Singleton类中__new__()的执行虽然这种情况出现的概率极小但不可忽视。 如果子类有__init__()方法那么每次实例化该Singleton的时候init()都会被调 用到这显然是不应该的init()只应该在创建实例的时候被调用一次。 这两个问题当然可以解决比如通过文档告知其他程序员子类化Singleton的时候 请务必记得调用父类的__new__()方法而第二个问题也可以通过偷偷地替换掉方 法来确保它只调用一次。但是为了实现一个单例做大量的、水面之下的工作让人感觉相 当不Pythonic。这也引起了 Python社区的反思有人开始重新审视Python的语法元素发 现模块采用的其实是天然的单例的实现方式。 所有的变量都会绑定到模块。 模块只初始化一次。 import机制是线程安全的保证了在并发状态下模块也只有一个实例)。 当我们想要实现一个游戏世界时只需简单地创建World.py就可以了。 World.py import Sun def run(): while True: Sun.rise() Sun.set() 然后在人口文件main.py里导入并调用run()函数看是不是感觉这种方式最为 Pythonic 呢 main.py import World World.run() Alex Martelli认为单例模式要求“实例的唯一性”本身是有问题的实际更值得关注 的是实例的状态只要所有的实例共享状态可以狭义地理解为属性)、行为可以狭 义地理解为方法一致就可以了。在这一思想的进一步指导下他提出了 Borg模式 在C#中又称为Monostate模式。 class Borg: _shared_state {} def init(self): self.diet self.__shared_state and whatever else you want in your class – that’s all! 通过Borg模式可以创建任意数量的实例但因为它们共享状态.从而保证了行为一致。虽然Alex的这个Borg模式仅适用于古典类classic clasess), Python 2.2版本 以后的新式类new-style classes)需要使用__getattr__和__setattr__方法来实现代码略),但其可开阔眼界。
http://www.dnsts.com.cn/news/281787.html

相关文章:

  • 用自己电脑配置服务器做网站做门户网站预算
  • 兼职做一篇微信的网站中国核工业第二二建设有限公司待遇
  • 学做网站能赚多少永嘉网站建设几
  • 如何用html做班级网站html5开发wap网站
  • 泸州网站开发公司seo在线优化系统
  • 专业建站公司设计方案搜索引擎优化的方法有哪些?
  • tp5 网站开发世界工厂网登录
  • 山东省城乡住房和建设厅网站黄骅港金沙滩景区
  • 做贸易的都有什么网站做画册好的网站
  • 南充网站建设公司优书网书库
  • 英文WordPress站点切换为中文免费网站教程
  • 做网站前两个月应该干什么吉首做网站
  • 哪个是网络营销导向网站建设的基础做鞋的垂直网站
  • 想做一个部门的网站怎么做2018做论坛网站好吗
  • 网站开发会议议程范文查看域名之前做的网站
  • 如何做网站规范珠海百度seo公司
  • 百度小程序跟做网站南阳建网站企业
  • 贵阳网站制作费用人人开发app
  • 注册建设通网站找人开发一个app多少钱
  • 稀奇古怪好玩有用的网站网站建设技术网站
  • html5网站建设中专做外贸库存的网站
  • 做网站用虚拟主机好吗网站之间如何做视频交换
  • 外贸推广的几种方式以及效果排行广东宣布即时优化调整
  • 网站建设江苏百拓网站建设太难了
  • 描述网站开发的过程哪里可以学网站建设
  • 会员收费网站怎么做个人建站赚钱
  • 网站优化推广多少钱哪个app可以找培训班
  • 西安网站建设 至诚律师网站建设 优帮云
  • 安康建设网站策划公司宣传语
  • 查企业不要钱的软件淘宝关键词优化技巧教程