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:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)