일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 귀무/대립가설
- 클로저(closure)
- 리스트컴프리헨션
- XML읽기
- CRUD 게시판
- CSS
- Process
- AJAX
- 투표알고리즘
- DB연동
- 폴더구조변경
- 클래스
- CSS적용방식
- eclipse #python
- VSCode
- 웹스크래핑
- 나이브베이지안분류
- SQL
- python 모듈 설치
- pandas
- Thread
- 서류합격팁
- 통계
- Python
- get/post
- GAC 자격증
- HTML
- javascript
- 멀티프로세싱
- 간단한채팅프로그램
- Today
- Total
EASY PEASY CODING
[파이썬] Singleton Pattern 본문
싱글톤 패턴(Singleton Pattern)
class SingletonClass:
inst = None
def __new__(cls):
if cls.inst is None:
cls.inst = object.__new__(cls)
return cls.inst
def aa(self):
print('난 메소드야')
위 코드에서 SingletonClass는 싱글톤 패턴을 구현한 클래스입니다. 이 클래스는 inst라는 클래스 레벨 변수를 가지고 있습니다. __new__ 메서드를 오버라이드하여 이미 인스턴스가 존재하는지 확인하고, 존재하지 않는 경우에만 새로운 인스턴스를 생성합니다.
+) cls는 파이썬에서 "클래스(self)"의 약자로, 클래스 내부에서 클래스 자신을 가리키는 역할을 합니다.
__new__ 메서드는 클래스 메서드이기 때문에 첫 번째 매개변수로 자신을 나타내는 cls가 전달됩니다.
따라서 cls.inst는 클래스 레벨의 변수 inst를 가리킵니다.
이 메서드는 객체를 생성할 때 호출되며, 새로운 객체를 만들어 반환합니다. 일반적으로 __new__는 __init__ 메서드보다 먼저 호출되어 객체를 초기화합니다. 그래서 __new__에서 객체를 생성하고 초기 상태를 설정한 뒤, __init__에서 추가적인 초기화 작업을 수행하는 것이 일반적입니다.
따라서 주로 __new__ 메서드는 객체의 생성 방식을 제어하고, 특별한 경우에만 객체를 생성하거나 새로운 객체를 반환하는 역할을 합니다.
class SubClass(SingletonClass):
pass
SubClass는 SingletonClass를 상속받은 클래스입니다. 이 클래스도 싱글톤 패턴을 따릅니다. 따라서 SubClass의 인스턴스를 생성해도 이미 생성된 인스턴스가 반환됩니다.
클래스의 멤버 변수를 고정
class Ani:
__slots__ = ['irum','nai']
def printData(self):
print(self.irum,self.nai)
Ani 클래스에서는 __slots__를 사용하여 클래스의 멤버 변수를 고정시킵니다. 이 경우에는 irum과 nai만 허용됩니다. 따라서 다른 속성을 추가하려고 하면 에러가 발생합니다.
a= Ani()
a.irum='호랑이'
a.nai=3
a.eat='치킨' # 에러 발생: 'Ani' object has no attribute 'eat'
a.printData() # 출력: 호랑이 3
a 객체를 생성하고 irum과 nai 속성을 할당한 뒤, printData 메서드를 호출하여 결과를 확인할 수 있습니다.