Archive

[파이썬 기초] 비공개 멤버와 정적 메서드 본문

공부/Python

[파이썬 기초] 비공개 멤버와 정적 메서드

mariabeetle 2017. 10. 4. 00:32

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()
# 비공개 


cs


2. 비공개 속성은 언제 사용할까?

- 클래스를 상속할 때 사용하자.

- 슈퍼 클래스를 만들 때 상속을 고려하는데, 이때 메서드의 이름이 중복되지 않도록 주의해야 한다.( 오버라이드 )

- 오버라이드를 금지시키고 싶은 요소 앞에 '__'를 붙여주자.(언더바 2개)

- 객체지향을 사용하면 클래스를 설계한 사람과 이용하는 사람이 역할을 분담할 수 있다.

- 요소를 클래스 설계자만이 사용할 수 있게 하려면 요소 이름 앞에 언더바를 붙인다.


3. 빈 클래스

class Hoge : pass

- 빈 클래스에서는 인스턴스 변수를 사용할 수 있고, 여러 개의 변수를 모아둘 때 도움이 된다.

1
2
3
4
5
6
7
8
9
10
11
12
class Empty : pass
 
= 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
Comments