python使用单例模式前后的输出结果出生了变化,这是为什么?

from abc import *
import copy
 
 
class Product(metaclass = ABCMeta):
 
    @abstractmethod
    def use(self):
        pass
 
    @abstractmethod
    def clone(self):
        pass
 
 
class UnderlinePen(Product):
 
    def use(self, s:str):
        n = len(s)
        print(s)
        for i in range(n):
            print("~", end="")
        print()
 
    def clone(self):
        return copy.deepcopy(self)
class MessageBox(Product):
    
    def __init__(self, deco:str):
        self.deco = deco
 
    def use(self,s:str):
        n = len(s) + 4
 
        for i in range(n):
            print(self.deco, end="")
        print()
        print(self.deco, s, self.deco)
        for i in range(n):
            print(self.deco, end="")
        print()
 
    def clone(self):
        return copy.deepcopy(self)
 
 
class Manager:
    def __init__(self):
        self.showcase = {"a" : 1}
    
    def register(self, name:str, proto :Product):
        self.showcase[name] = proto
 
    def create(self,protoName):
        p = self.showcase[protoName]
        return p.clone()
Manager = Manager()
 
m1 = MessageBox("*")
m2 = MessageBox("#")
p1 = UnderlinePen()
 
Manager.register("msg*",m1)
Manager.register("msg#",m2)
Manager.register("pen",p1)
msg1 = Manager.create("msg*")
msg2 = Manager.create("msg#")
pen = Manager.create("pen")
 
word = "hello"
msg1.use(word)
word = "world"
msg2.use(word)
pen.use(word)

单例模式:

class Product(metaclass = ABCMeta):

    __instance=None

    def __init__(self):
        pass

    def __new__(self, *args, **kwargs):
        if Product.__instance is None:
            Product.__instance=object.__new__(self)
        return Product.__instance

正常的输出结果为:

*********

* hello *

*********

#########

# world #

#########

world ~~~~~

 

单例模式输出结果:

#########

# hello #

#########

#########

# world #

#########

#########

# world #

#########

 

 

 

 

程序走单例模式后,输出样式被指定为#