• day 25


    一.单例模式:

    方法一.

    p = "1.1.1.1"
    port = 3306
    class Mysql:
        __instance=None
        def __init__(self,ip,port):
            self.ip=ip
            self.port=port
        @classmethod
        def from_conf(cls):
            if cls.__instance==None:
                cls.__instance=cls(ip,port)
    
            return  cls.__instance
    
    obj1=Mysql.from_conf()
    obj2=Mysql.from_conf()
    obj4=Mysql("12212",2333)
    print(obj1)
    print(obj2)
    print(obj4)

    方法二:(装饰器)

    ip = "1.1.1.1"
    port = 3306
    
    def auth(cls):
        cls.__instance = cls(ip, port)
        def wrapper(*args, **kwargs):
            if args or kwargs:
                res = cls(*args, **kwargs)
                return res
            else:
                return  cls.__instance
        return wrapper
    
    @auth
    class Mysql:
        __instance = None
    
        def __init__(self, ip, port):
            self.ip = ip
            self.port = port
    
    
    obj1=Mysql()
    obj2=Mysql()
    obj4=Mysql("1.1.1.1",3306)
    print(obj1)
    print(obj2)
    print(obj4)

    方法三:(元类)

    ip = "1.1.1.1"
    port = 3306
    class Mymeta(type):
        def __init__(self,class_name,class_base,class_dic):
           self.__instance=self(ip,port)
        def __call__(self, *args, **kwargs):
            if args or kwargs:
                obj=self.__new__(self)
                self.__init__(obj, *args, **kwargs)
                return  obj
            return  self.__instance
    
    class Mysql(metaclass=Mymeta):
        def __init__(self,ip,port):
            self.ip=ip
            self.port=port
    
    obj1=Mysql()
    obj2=Mysql()
    obj3=Mysql("1.1.1.1",3306)
    
    print(obj1)
    print(obj2)
    print(obj3)

    方法四:(导入模块的方式)

    p="1.1.1.1.1"
    port=3306
    
    class Mysql:
        print("run ....")
        def __init__(self,ip,port):
            self.ip=ip
            self.port=port
    instance=Mysql(ip,port)
    
    
    from settins import Mysql,instance
    
    obj=Mysql("1.1.1",3306)
    obj1=instance
    obj2=instance
    print(obj1)
    print(obj2)
    print(obj)

    二.网络编程简介:

    1.目标:编写一个c/s架构的软件
    c/s : Client--------------基于网络------------Server
    b/s: Browser---------------基于网络------------Server
    
    2.服务端需要遵循的原则:
        1.服务端与客户端都需要一个唯一的地址,但是服务端的地址必须固定/绑定
        2.对外一直提供服务,稳定运行
        3.服务端应该支持开发
    
    3.网络:目的是为了数据的交互(通信)
    如何实现通信:
        1.建立好底层的物理连接介子
        2.有一套统一的通信标准,称之为互联网协议
    
    4.互联网协议:
    物理层:高低电频  电缆 双绞线
    数据链路层:以太网协议(enternet) mac地址 以广播的形式传递下消息(只可以在局域网内使用)
    网络层:ip协议  ip  可以定位到世界上的某一台主机
    传输层:tcp/udp协议 port 端口  可以定位到世界上的某一个主机上的某一个程序
    用户层:用户自己写的协议
    
        ip+mac可以标识全世界范围内独一无二的一台计算机的位置
        port可以标识一台计算机之上唯一的一个基于网络通信的应用软件
        ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)
  • 相关阅读:
    linux 远程同步数据工具rsync (1)
    lamp+nginx代理+discuz+wordpress+phpmyadmin
    Linux nginx 配置 location 语法 正则表达式
    linux下用ctrl+r快速搜索history命令
    常用服务的默认端口
    nginx rewrite不支持if 嵌套也不支持逻辑或和逻辑并
    nginx的301与302如何配置
    nginx $document_uri 参数使用
    选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
    为什么托管代码要慢
  • 原文地址:https://www.cnblogs.com/jxl123/p/9549666.html
Copyright © 2020-2023  润新知