반응형
4. 파이썬 심화 - 클래스_02
0. 비공개 속성 & 비공개 메서드
비공개 속성
앞에서 설명했지만 익숙해지기 위해서 다시 언급하고 넘어간다.
- 공개 속성(public attribute) : 클래스 외부에서 접근
- 비공개 속성(private attribute) : 클래스 내부에서만 접근 가능
비공개 매서드
비공개 속성과 유사한 형태로 사용 가능하다.
비공개 메서드도 메서드를 클래스 바깥으로 드러내고 싶지 않을 내부에서만 호출되어야 하는 때 사용한다.
# 비공개 메소드
class Bank:
def __Account(self):
print('money')
def Payment(self):
self.__Account() # 호출가능
BoA = Bank()
BoA.__wallet() # 에러
1. 위치 인수 & 키워드 인수
클래스로 인스턴스를 만들 때 위치 인수와 키워드 인수를 사용 가능하다.
규칙 : 위치 인수와 리스트 언패킹을 사용하려면 *args
를 사용하면 가능
매개변수에서 값을 가지고 오려면 args[0]
이렇게 사용!!!
class Person():
def __init__(self, *args): # 위치인수 : *args
self.name = args[0]
self.age = args[1]
self.adress = args[2]
Jerry = Person(*['제리', 30, '부산'])
만약에 키워드 인수와 딕셔너리 언패킹을 사용하려면
다음과 같이 **kwargs
를 사용하면 된다.
매개변수에서 가져오는 값은 kwargs ['키값'] 이렇게 하면 된다.
class Person():
def __init__(self, **kwargs): # 키워드인수 : **kwargs
self.name = kwargs['name']
self.age = kwargs['age']
self.adress = kwargs['address']
Jerry_frt = Person( name = '제리', age = 30, address = '부산'] )
Jerry_snd = Person( **{ 'name' : '제리', 'age' : 30, 'adress' : '부산'} )
2. 인스턴스 생성 후 속성 추가 + 특정 속성만
__init__
메서드뿐 아니라
클래스로 인스턴스를 만든 뒤 인스턴스.속성 = 값
형식으로 속성을 계속 추가 가능하다.
# 예제
class Person: # 빈클래스 생성
pass
Joy = Person() # 인스턴스 생성
Joy.name = '조이' # 인스턴스를 만든 뒤 속성 추가 -> 해당 인스턴스에만 생성
Joy.name # 다른 인스턴스에서는 추가한 속성이 생성안됨
# outPut
# >>> '조이'
### 다른 인스턴스에서는 추가한 속성이 생성안됨 -> 예시
Jun = Person() # Jun 인스턴스 생성
Jun.name # Joy 인스턴스에만 name 속성을 추가 -> Jun 인스턴스에는 name X
에러가 발생하였다.
# outPut
# >>> Traceback (most recent call last):
# File "<pyshell#11>", line 1, in <module>
# Jun.name
# AttributeError: 'Person' object has no attribute 'name'
메서드를 호출하고 속성을 부여하면 동작한다.
# 예제
class Person: # 빈클래스 생성
def greeting(self):
self.hello = '안냥'
Joy = Person() # 인스턴스 생성
Joy.hello # 아직은 속성 x
# 그럼 다시
Joy.greeting() # greeting 메소드를 호출
Joy.hello # hello 속성 o
# outPut
# >>> '조이'
인스턴스는 자유롭게 속성을 추가 가능 하지만
특정 속성만 허용, 다른 속성은
제한하고자 할 때 클래스에서 __slots__
에 허용할 속성 이름(속성의 이름은 반드시 문자열!)을 리스트이어야 한다.
# 예제
class Person:
__slots__ = ['name', 'age'] # name, age만 허용(다른 속성은 생성 제한)
Joy = Person()
Joy.name = '조이' # 속성 허용
Joy.age = 30 # 속성 허용
Joy.adress = '인천' # 허용안됨 -> 추가할 때 에러가 발생함
Reference
- 파이썬 코딩도장 : https://dojang.io/
'Programming > Python' 카테고리의 다른 글
[ Python_심화 ] 6. 클래스 상속(inheritance) (0) | 2020.07.01 |
---|---|
[ Python_심화 ] 5. 클래스 활용 (0) | 2020.06.27 |
[ Python_심화 ] 4. 클래스_01 (2) | 2020.06.26 |
[ Python_심화 ] 3. 클로저(Closure) (0) | 2020.06.25 |
[ Python_심화 ] 2. 변수 (0) | 2020.06.25 |