单例 售票员只有一个 实例只有一个

理解单例前需要了解  init 和new
这是init的效果

# 认识new 和init
class People(object):
    # def __new__(cls, *args, **kwargs):
    #     print("执行了new")
    #     return object.__new__(cls)

    def __init__(self,name,age):
        print("执行了init")
        self.name= name
        self.age= age


p=People("Jack",18)
print(p)# 打印p的地址
'''
执行了init
<__main__.People object at 0x000001E0371036A0>
'''
这是额外添加了new之后的效果,仅执行了new 没有执行init
# 认识new 和init
class People(object):
    def __new__(cls, *args, **kwargs):
        print("执行了new")
    #     return object.__new__(cls)

    def __init__(self,name,age):
        print("执行了init")
        self.name= name
        self.age= age


p=People("Jack",18)
print(p)# 打印p的地址
'''
执行了new
None
'''
这是在new中加入了return后的效果,既执行了new又执行了init
# 认识new 和init
class People(object):
    def __new__(cls, *args, **kwargs):
        print("执行了new")
        return object.__new__(cls)

    def __init__(self,name,age):
        print("执行了init")
        self.name= name
        self.age= age


p=People("Jack",18)
print(p)# 打印p的地址
'''
执行了new
执行了init
<__main__.People object at 0x0000025E4CEB38B0>
'''

 









单例的意义就是保证 创建一个实例
第一部分:没用单例之前   出现了4个公交车司机;第二部分  使用单例后,每次只有一个公交车司机;
class BusDriver:
    def __init__(self):# 定义公交车司机的姓名和卖票张数
        self._BusDriver_name='BusDriver-Jack'# 姓名
        self._sum=0 # 卖票张数
    def sell(self,Passenger_name):
        print('司机%s,给乘客%s卖了一张票'%(self._BusDriver_name,Passenger_name))
        self._sum+=1 # 合计买票数
    def getsum(self):
        return self._sum
class Passenger:
    def __init__(self,Passenger_name):
        self._Passenger_name=Passenger_name # 乘客的姓名
    def buy(self):
        bus_driver= BusDriver() # 调用司机类
        bus_driver.sell(self._Passenger_name)  #调用司机类中 卖票方法
        sum_sum=bus_driver.getsum() # 调用司机类中获得卖票总数
        print(sum_sum)

li= ['Mary','John','Lucy','Amy']
for one in li:
    Passenger(one).buy()
'''

司机BusDriver-Jack,给乘客Mary卖了一张票
1
司机BusDriver-Jack,给乘客John卖了一张票
1
司机BusDriver-Jack,给乘客Lucy卖了一张票
1
司机BusDriver-Jack,给乘客Amy卖了一张票
1

'''

 

 

class BusDriver:
    # 创建一个自己self 初始化None
    _self= None

    _name = 'BusDriver-Jack'  # _name 司机的姓名
    _sum = 0  # 卖票张数
    # _flag= False
    
    # 创建单例
    def __new__(cls,*args,**kwargs):
        if cls._self is None:
            cls._self= super().__new__(cls)#创建一个新的自己self
        return cls._self

    def sell(self,nameP):# 传入乘客的姓名
        print('司机%s,给乘客%s卖了一张票'%(self._name,nameP))
        self._sum+=1 # 合计买票数
    def getsum(self):
        return self._sum
class Passenger:
    def __init__(self,nameP):
        self._nameP=nameP # 乘客的姓名
    def buy(self):
        bus_driver= BusDriver() # 调用司机类
        bus_driver.sell(self._nameP)  #调用司机类中 卖票方法
        sum_sum=bus_driver.getsum() # 调用司机类中获得卖票总数
        print(sum_sum)

li= ['Mary','John','Lucy','Amy']
for one in li:
    Passenger(one).buy()
'''

司机BusDriver-Jack,给乘客Mary卖了一张票
1
司机BusDriver-Jack,给乘客John卖了一张票
2
司机BusDriver-Jack,给乘客Lucy卖了一张票
3
司机BusDriver-Jack,给乘客Amy卖了一张票
4

'''

 

 

posted @ 2023-07-15 18:59  胖豆芽  阅读(4)  评论(0编辑  收藏  举报