学习日记0828单例 OSI七层协议

单例的四种实现方式:

配置文件settings

IP = 1.1.1.1
PORT = 8080

  实现方式一(内置方法):


import settings

class
Foo: _instance = None def __init__(self,IP,ROPT): self.IP = IP self.ROPT = PORT @classmethod def from_conf(cls): if not _instance: cls._instance = cls(settings.IP,setting.ROPT) return cls._instance
obj1= Foo.from_conf()
obj2 = Foo.from_conf()
obj3 = Foo(223,456)

  实现方式二(装饰器):

    原理是:被装饰器装饰的类或者行数,在被调用时实际上是调用了装饰器中的 wrapper,而整个装饰器只会在检测到@的时候执行一次

  import settings

def dl(cls):
    _instance = cls(settings.IP,settings.PORT)  
    def wrapper(*args,**kwargs):
        if args or kwargs:
            obj = cls(*args,**kwargs)
            return obj
        else:
        return _instance
    return wrapper  
@dl
def Foo():
  def __init__(self,IP,ROPT):
        self.IP = IP
        self.ROPT = PORT

obj1 = Foo()
obj2 = Foo()
obj3 = Foo(123,566)

  

  实现方式三(元类):

    原理:元类中的__class__可以控制类被创建后再次的再次调用

class Mymeta(type):
    def __init__(self,class_name,class_base,class_dic):
        self.__instance = self(settings.IP,settings.PORT)
    
    def __class__(self,*args,**kwargs):
        if args or kwargs:
            obj = self.__new__(self)
            self.__init__(obj,*args, **kwargs)
            return obj
        else:
            return self.__instance

class Foo(metaclass=Mymeta):
    def __init__(self,ip,jk):
        self.ip = ip
        self.jk = jk

obj1 = Foo()
obj2 = Foo()
print(obj1)
print(obj2)

  实现方式四(调用模块):

    原理:模块只会被导入一次,以后的每次导入都是基于上一次的导入的结果而进行

  module.py文件

import settings
class Foo:
    def __init__(self,IP,PORT):
        self.IP = IP
        self.PORT = PORT
_instance = Foo(settings.IP,settings.PORT)
import module

obj1 = module._instance
obj2 = module._instance
obj3 = module.Foo(123,456)

 网络编程(简介):

  C/S:Client--------基于网络---------Server

  B/S:Browser-----基于网络---------Server

  OSI七层协议:也可以总结为5层

    1 应用  2 传输层  3 网络层  4 数据链路层  5 物理层

  2 服务端

    1 服务端与客户端都需要有唯一的地址,但是服务端的地址必须固定/绑定

    2 对外一直提供稳定的服务,稳定运行

    3 服务端应该支持并发

原文地址:https://www.cnblogs.com/jianhaozhou/p/9548689.html