일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 야근지수
- 백준
- 피보나치 함수
- candies
- Roads and Libraries
- 알고리즘
- 매칭점수
- hackerrank
- Max Array Sum
- Interview Preparation Kit
- Common Child
- Algorithm
- 프로그래머스
- Reverse Shuffle Merge
- programmers
- [sqld]자격증합격
- 격파르타 장점
- 격파르타 후기
- BFS: Shortest Reach in a Graph
- Special String Again
- 머신러닝
- python
- 해커랭크
- 코딩테스트
- 구슬탈출2
- 격파르타 합격후기
- DFS: Connected Cell in a Grid
- Find the nearest clone
- 파이썬
- Recursion: Davis' Staircase
- Today
- Total
Archive
[파이썬 기초] 비공개 멤버와 정적 메서드 본문
1. 비공개 멤버
- 클래스의 상세한 구조에 관해 몰라도 클래스에 포함된 기능을 이용할 수 있으면 된다.
- 객체지향에서는 '캡슐화'라는 은폐 기능이 있다.
- 파이썬에서는 메서드 이름이나 변수 이름이 '_'로 시작되는 것은 '비공개 멤버'로 정의하고 클래스를 이용하는 사람은 이 비공개 멤버에 접근할 수 없다는 규칙이 있다.
- 멤버 : 클래스 안에 정의하는 메서드나 변수
- 실제로는 클래스 이용자도 언더바로 시작되는 이름의 멤버를 조작할 수 있다.
- 맹글링 : 멤버 앞에 '__' 언더바를 2번 붙인다. 멤버 이름이 '_클래스명__요소명'으로 치환된다.(바로 '인스턴스.__멤버'로 접근하면 오류가 발생)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Game: def __goal(self): print("비공개 메서드") def play(self): print("공개 메서드") game = Game() game.play() # 공개 메서드 game.__goal() # 오류 발생 game._Game__goal() # 비공개 |
2. 비공개 속성은 언제 사용할까?
- 클래스를 상속할 때 사용하자.
- 슈퍼 클래스를 만들 때 상속을 고려하는데, 이때 메서드의 이름이 중복되지 않도록 주의해야 한다.( 오버라이드 )
- 오버라이드를 금지시키고 싶은 요소 앞에 '__'를 붙여주자.(언더바 2개)
- 객체지향을 사용하면 클래스를 설계한 사람과 이용하는 사람이 역할을 분담할 수 있다.
- 요소를 클래스 설계자만이 사용할 수 있게 하려면 요소 이름 앞에 언더바를 붙인다.
3. 빈 클래스
class Hoge : pass
- 빈 클래스에서는 인스턴스 변수를 사용할 수 있고, 여러 개의 변수를 모아둘 때 도움이 된다.
1 2 3 4 5 6 7 8 9 10 11 12 | class Empty : pass o = Empty() o.id = 100 o.name = "Chulsoo" o.job = "Programmer" print(o.id) # 100 print(o.name) # Chulsoo | cs |
1 2 3 4 5 6 7 8 9 10 11 12 | class Empty : pass calc = Empty() # lambda도 오브젝트 -> 메서드를 동적으로 추가할 수 calc.x2 = lambda x : x * 2 calc.x3 = lambda x : x * 3 print(calc.x2(8)) print(calc.x3(5)) # 16 # 15 | cs |
4. 정적인 메서드 static method
- 클래스로 인스턴스를 생성하지 않고 클래스 안에 정의한 메서드를 사용할 때 정적인 메서드를 정의한다.
- '@staticmethod'라는 데코레이터를 추가한다.
1 2 3 4 5 6 7 | class Blar: @staticmethod def introduce(): print("Blar") Blar.introduce() # Blar | cs |
- static method에서는 인수 self를 지정할 필요가 없다.
'공부 > Python' 카테고리의 다른 글
리스트, 딕셔너리 연산 및 시간복잡도 (0) | 2020.07.29 |
---|---|
파이썬 기초 (0) | 2020.07.29 |
[파이썬 기초] 상속 (0) | 2017.10.03 |
[파이썬 기초] 클래스 (0) | 2017.10.03 |
[파이썬 기초] 데코레이터 (0) | 2017.10.03 |