python 대상 을 위 한 단일 예 모드
2693 단어 python
어떤 방법 을 바탕 으로 클래스 실례 화 를 통 해 얻 은 대상 이나 메모리 주소 가 같은 것 을 가리킨다.
모두 네 가지 방법 이 있 습 니 다.마지막 방법 은 가방 으로 가 져 와 서 사용 하 는 것 입 니 다.
방식 1
settings.py :
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 not cls.__instance: #cls = Mysql ==> Mysql.__instance ,
cls.__instance = cls(settings.ip, settings.port)# ===> Mysql(settings.ip, settings.port)
return cls.__instance
obj1 = Mysql.from_conf()
obj2 = Mysql.from_conf()
obj3 = Mysql('1.1.1.10', 3302)
print(obj1)
print(obj2)
print(obj3)
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
@classmethod
def from_conf(cls):
if not hasattr(cls,'_%s__instance'%cls.__name__):# hasattr
cls.__instance = cls(settings.ip, settings.port)# ===> Mysql(settings.ip, settings.port)
return cls.__instance
obj1 = Mysql.from_conf()
obj2 = Mysql.from_conf()
obj3 = Mysql('1.1.1.10', 3302)
print(obj1)
print(obj2)
print(obj3)
방식 2
def singleton(cls):
_instance = cls(settings.ip, settings.port) # settings
def wrapper(*args, **kwargs): # *args,**kwargs
if args or kwargs: #
obj = cls(*args, **kwargs) # obj
return obj
return _instance # wrapper , _instance
return wrapper
@singleton # Mysql=singleton(Mysql)==>Mysql = wrapper
class Mysql:
def __init__(self, ip, port):
self.ip = ip
self.port = port
obj1 = Mysql() # Mysql wrapper , wrapper
obj2 = Mysql()
obj3 = Mysql('1.1.1.10', 3302) # obj3 = wrapper('1.1.1.10',3302)
print(obj1)
print(obj2)
print(obj3)
방 식 삼
class Mymeta(type):
def __init__(self,class_name,class_bases,class_dic):#self = Mysql
super().__init__(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# Msql
class Mysql(metaclass=Mymeta): #Mysql = Mymeta(...)
def __init__(self, ip, port):
self.ip = ip
self.port = port
obj1 = Mysql()
obj2 = Mysql()
obj3 = Mysql('1.1.1.2', 3307)
print(obj1)
print(obj2)
print(obj3)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.