정적 메소드란?
- 정적 메소드 또는 스태틱 메소드로 혼용
- 클래스에서 직접 호출할 수 있는 메소드
- 메소드를 정의할 때 인스턴스 객체를 참조하는 self라는 인자를 선언하지 않음
정적 메소드의 특징
클래스 인스턴스에는 적용되지 않는 메소드
클래스.메소드 명으로 호출 가능
class MyCalc(object):
@staticmethod
def my_add(x,y):
return x+y
MyCalc.my_add(3,4) # 7
private 멤버변수란?
클래스 내부의 멤버 변수 중 숨기고 싶은 변수
private 멤버변수 특징
- 클래스의 내부 변수는 일반적으로 public 속성을 갖기 때문에 외부에서 마음대로 접근하거나 변경 가능
- 이름 변경
- 외부에서 접근이 어렵도록 하는 파이썬의 특징
- 외부에서 클래스 내부의 멤버 변수를 호출할 때, 원래 이름이 아닌 _클래스명__멤버 변수로 변경됨
식별자
키워드는 아니지만 private 멤버 변수로 사용하기 위해, 미리 정해진 용도로 사용하는 문자
식별자 (예약어) |
정의 | 예시 |
_* | 모듈(파일) 안에서 _로 시작하는 식별자를 정의하면 다른 파일에서 접근할 수 없음 | _name |
__*__ | 식별자의 앞뒤에 __가 붙어 있는 식별자는 시스템에서 정의한 이름 | __doc__ |
__* | 클래스 안에서 외부로 노출되지 않는 식별자로 인식 | __name |
class BankAccount:
# private 멤버변수로 선언
__id=0
__name=""
__balance=0
def __init__ (self, id, name, balance):
self.__id=id
self.__name=name
self.__balance=balance
def deposit(self, amount):
self.__balance + amount
def withdraw(self, amount):
self.__balance -= amount
def __str__(self):
return "{0}, {1}, {2}".format(self.__id, self.__name, self.__balance)
# 안스턴스 객체 생성
account1 = BankAccount(100, '전우치', 15000)
account1.withdraw(3000)
print(account1) # 100, 전우치, 12000
# 에러가 발생하는 코드(원래 내부 이름으로 접근하는 코드)
print(account1.__balance) # AttributeError: 'BankAccount' object has no attribute '__balance'
# 옳은 접근 방법
print(account1._BankAccount__balance) # 12000
# 클래스 외부에서는 아래와 같이 접근, private 멤버 변수 접근하기
print(BankAccount._BankAccount__balance) # 0
BankAccount._BankAccount__balance = 35000
print(BankAccount._BankAccount__balance) # 35000
'Python > Python 기초' 카테고리의 다른 글
[Python] 파이썬 모듈 사용하기 (0) | 2022.03.15 |
---|---|
[Python] 상속과 다형성 (0) | 2022.03.15 |
[Python] 클래스 정의와 인스턴스 생성 (0) | 2022.03.15 |
[Python] 함수 (0) | 2022.03.12 |
[Python] 집합 자료형 (0) | 2022.03.12 |
댓글