Notice
Recent Posts
Link
Tags
- sql
- SSL
- 문자열
- nginx
- 데이터베이스
- AWS
- ORM
- springboot
- DI
- spring mvc
- string
- 스프링부트
- spring boot
- jpa
- 스프링
- select
- 1차원 배열
- spring
- mysql
- 프로그래머스
- 자바
- Django
- session
- spring security 6
- Docker
- join
- @transactional
- PYTHON
- Git
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Archives
개발하는 자몽
[Python] 속성(Attribute) 본문
위 블로그 글이 매우 잘 정리되어 있으니 위 글을 읽는 것을 추천합니다. (읽고 그냥 정리했습니다)
자바에서는 필드라고 부르는 것들! 파이썬에서는 속성(Attribute)이라고 부르는 것 같다. 헷갈리는 것들이 많아서 위 블로그 글을 읽고 정리했다.
속성(Attribute)은 클래스 내부에 포함된 메서드나 변수를 의미하며, 크게 클래스 속성과 인스턴스 속성으로 나뉜다.
class Person:
클래스_속성 = 값 # 클래스 속성
def __init__(self, name):
# 속성은 메서드에서 "self"로 접근하거나 "인스턴스.속성" 형식으로 클래스 밖에서 접근 가능
self.인스턴스_속성 = 값 # 인스턴스 속성
self.name = name
jaamong = Person("자몽", 100, "지구")
jaamong.name # 인스턴스.속성
클래스 속성
- 클래스 내부의 메서드 단계와 동일한 영역에 위치한 변수
- self를 사용하지 않고 정의 (self : 자기 자신을 의미함. 인스턴스를 지칭 (Java의 this와 비슷하다)
- 클래스 속성에 접근할 경우, 모든 클래스에 동일하게 영향을 미침 (self를 사용하지 않고 정의하므로)
- 인스턴스가 생성될 때 초기화되지 않으므로, 클래스명.클래스_속성 으로 참조 가능 (Java의 public static 변수처럼 이해)
인스턴스 속성
- self를 통해 할당된 인스턴스만의 변수
- self로 정의 → 인스턴스 내에서만 영향을 미침
- 주로, __init__이나 메서드 내부에서 할당된 변수
- 인스턴스를 초기화할 때 생성됨 → 인스턴스명.인스턴스_속성으로 참조 가능
class Jaamong:
class_attr = 0
def __init__(self):
self.instance_attr = 0
def set_class_attr(self):
Jaamong.class_attr = 10
def set_instance_attr(self):
self.class_attr = 20
instance1 = Jaamong()
instance2 = Jaamong()
# 클래스 속성 변경(Jaamong 클래스에 대한 동일한 속성이 일괄 변경됨)
instance1.set_class_attr()
print(instance1.class_attr, instance2.class_attr) # 10 10
# 인스턴스 속성 변경 (instance1에 대한 속성만 변경됨)
instance1.set_instance_attr()
print(instance1.class_attr, instance2.class_attr) # 20 10
class_attr은 클래스 속성이므로 instance1을 통해 class_attr을 변경하면 instance2를 통해 접근했을 때도 변경된 상태로 출력된 것을 알 수 있다(모든 클래스에 영향을 미침)
이 때 클래스명.클래스_속성으로 접근하지 않고 self로 접근하면 인스턴스 속성처럼 인스턴스 내에서만 영향을 미치게 된다.
'Python' 카테고리의 다른 글
Ubuntu 환경에서 특정 버전의 파이썬 제거하기 (0) | 2024.03.08 |
---|---|
[Python/Django] Windows 10에서 가상 환경, Django 설치 (0) | 2023.09.18 |
[Python] pass를 사용하는 이유 (0) | 2023.09.11 |
[Python] 메소드 오버라이딩 (0) | 2023.09.08 |
Comments