1. 클래스 속성과 인스턴스 속성의 차이
- 앞선 글에서 다루었던 클래서 초기화 함수(__init__)에서 'self.속성'에 할당 했던 변수들은 모두 인스턴스 속성에 해당.
- 클래스 속성은 아래와 같이 self.속성에 할당하는 것이 아니라 class안에서 바로 할당하는 것이다.
class CustomClass:
속성명 = 값
def custom_method():
pass
...
2. 클래스 속성
- 클래스 속성에 접근하는 메소드를 작성해보자.
class Flight:
class_attr = []
def add_class_attr(self, number):
Flight.class_attr.append(number)
- REPL에서 확인해보자.
- 객체를 2개를 만들고, 클래스 속성에 값을 추가하는 인스턴스 메소드를 사용.
- 클래스 속성에서의 직접접근 클래스명.클래스속성, 객체에서의 객체변수명.클래스속성 모두 똑같이 값을 공유.
>>> from airtravel import Flight
>>> f = Flight()
>>> g = Flight()
>>> f.add_class_attr(5)
>>> Flight.class_attr
[5]
>>> f.class_attr
[5]
>>> g.class_attr
[5]
>>> g.add_class_attr(7)
>>> Flight.class_attr
[5, 7]
>>> g.class_attr
[5, 7]
>>> f.class_attr
[5, 7]
- 똑같은 클래스 속성과 인스턴스 속성을 선언하고 값이 어떻게 변하는지 살펴보자.
- 클래스 초기화 함수(__init__)와 메소드를 하나 추가.
class Flight:
class_attr = []
def __init__(self):
self.class_attr = []
def add_instance_attr(self, number):
self.class_attr.append(number)
def add_class_attr(self, number):
Flight.class_attr.append(number)
- REPL에서 결과값을 확인해 보자.
- 인스턴스와 클래스 에 모두 같은 속성이 있으면 아래와 같이 인스턴스 속성을 먼저 찾는 것을 알 수 있다.
- 속성과 메소드 이름 찾는 순은 인스턴스 -> 클래스 순이다.
>>> from airtravel import Flight
>>> f = Flight()
>>> g = Flight()
>>> f.add_instance_attr(5)
>>> Flight.class_attr
[]
>>> f.class_attr
[5]
>>> g.class_attr
[]
- "클래스 속성"은 여러 객체가 공유한다는 것을 유의해야합니다.
- 편한점은 여러객체의 속성을 클래스 속성 하나의 수정으로 끝낼 수 있겠다는 생각이..
3. 비공개 클래스 속성
- 비공개 클래스 속성은 인스턴스의 비공개 속성과 동일하다. 언더바 두개(__)로 속성명이 시작하면 비공개 속성이된다.
- 코드로 확인해보자. 아래와 같이 __private_attr = 5 코드를 추가
class Flight:
__private_attr = 5
...생략
- REPL에서 확인해보면, 접근이 되지 않는것을 알 수있다.
>>> from airtravel import Flight
>>> Flight.__private_attr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Flight' has no attribute '__private_attr'
'Code Story' 카테고리의 다른 글
[Python] 정규식을 이용한 날짜 포맷 확인 (0) | 2022.05.30 |
---|---|
미디어 컨트롤을 위한 이벤트 발생. (0) | 2022.04.18 |
Class of Python - 클래스 기본적인 사용 (0) | 2022.01.26 |
OOP(Object-Oriented Programming) of Python (1) | 2022.01.25 |
[Admob] eCPM을 높여라 (0) | 2021.01.12 |