Python入门学习 DAY30(单例模式 网络编程介绍)

Python入门学习

DAY30

今日内容:  单例模式 网络编程介绍

 

单例模式

什么是单例模式

指多次实例化的结果指向同一个实例

列:

设置一个settings配置文件

IP='1.1.1.1'
PORT=3306

 

单例模式实现方式一:定义一个类方法实现单例模式

import settings
class MySQL:
    __instance = None

    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

    @classmethod
    def from_conf(cls):
        if cls.__instance is None:
            cls.__instance = cls(settings.IP, settings.PORT)
        return cls.__instance


obj1 = MySQL.from_conf()
obj2 = MySQL.from_conf()
obj3 = MySQL.from_conf()
obj4 = MySQL('1.2.3.4', 8080)
print(obj1)         #<__main__.MySQL object at 0x02A8A0D0>
print(obj2)         #<__main__.MySQL object at 0x02A8A0D0>
print(obj3)         #<__main__.MySQL object at 0x02A8A0D0>
print(obj4)         #<__main__.MySQL object at 0x02A8A0B0>

 

单例模式实现方式二:定制元类实现单例模式

import settings

class Mymeta(type):
    
    def __init__(self,class_name,class_bases,class_dic):
        self.__instance=self(settings.IP,settings.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()        
obj4=MySQL('1.2.3.4',8080)

print(obj1)           #<__main__.MySQL object at 0x0314A0B0>
print(obj2)           #<__main__.MySQL object at 0x0314A0B0>
print(obj3)           #<__main__.MySQL object at 0x0314A0B0>
print(obj4)           #<__main__.MySQL object at 0x0314A0F0>

 

单例模式实现方式三:定义一个装饰器实现单例模式

import settings

def sinleton(cls):
    cls.__instance = cls(settings.IP, settings.PORT)

    def wrapper(*args, **kwargs):
        if args or kwargs:
            obj = cls(*args, **kwargs)
            return obj
        return cls.__instance

    return wrapper

@sinleton
class MySQL:
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port

obj1 = MySQL()
obj2 = MySQL()
obj3 = MySQL()
obj4 = MySQL('1.2.3.4', 8080)

print(obj1)         #<__main__.MySQL object at 0x0339A0F0>
print(obj2)         #<__main__.MySQL object at 0x0339A0F0>
print(obj3)         #<__main__.MySQL object at 0x0339A0F0>
print(obj4)         #<__main__.MySQL object at 0x0339A0D0>


 

单例模式实现方式四:利用python不会重复导入包的机制

创建一个py文件 sinleton.py

import settings

class MySQL:
    def __init__(self,ip,port)
        self.ip=ip
        self.port=port


instance=MySQL(settings.ip,settings.port)

在执行文件中:


def func1():
    from sinleton import instance
    print(instance)            #<sinleton.MySQL object at 0x02ACA190>



def func2():
    from sinleton import instance,MySQL
    print(instance)            #<sinleton.MySQL object at 0x02ACA190>

    obj=MySQL('1.2.3.4',8080)
    print(obj)                 #<sinleton.MySQL object at 0x02A71370>


func1()
func2()

 

网络编程介绍

1. 什么是c/s 和 b/s

        c/s: Client(客户端) -------基于网络-------Server(服务端)

        b/s: Browser(浏览器) -------基于网络-------Server(服务端)

2. 服务端需要遵循的原则

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

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

        服务端应该支持并发

3. 网络

        网络的建立的目的是为了数据交互(通信)

        如何实现通信:

                 1. 建立好底层的物理连接介质

                 2. 有一套统一的通信标准,称之为互联网协议

4. 互联网协议

         互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

         OSI 七层协议

         物理层      数据链路层      网络层      传输层     应用层 (会话层      表示层 )     

物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

数据链路层:定义了电信号的分组方式(以太网协议)

网络层:引入网络地址用来区分不同的广播域/子网(ip协议,子网掩码,ARP协议)

传输层:建立端口到端口的通信(tcp协议,udp协议)

应用层:规定应用程序的数据格式(http协议 ftp协议)

 

以上为本次学习内容

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值