[Python] class (클래스와 인스턴스)
2022. 11. 19. 22:10
Human 클래스를 선언해보자
class Human:
# 클래스 속성
greeting = 'Hello'
# 초기화/인스턴스 속성
def __init__(self, name, age):
self.name = name
self.age = age
def cmethod():
print('클래스 메소드 호출')
def imethod(self):
print('인스턴스 메소드 호출')
다음으로 Human 클래스를 인스턴스화 해보자
a = Human('so', 20)
a2= Human('so', 20)
b = Human('yeon', 21)
print(a==a2)
Flase
a와 a2로 인스턴스화할 때 같은 값을 넣어줬지만 다르다!
id()를 사용해 객체의 고유 주소 값을 확인해봐도 다른 값이 들어있다.
인스턴스 속성
인스턴스 속성을 확인해보자
print('my name is {}'.format(a.name))
print('{}'.format(b.age))
so
21
클래스 속성 (직접 접근)
클래스 속성은 직접 접근이 가능하다
print(Human.greeting)
Hello
클래스 속성의 값을 변경해보고 인스턴스화 된 변수로 접근해보자
Human.greeting += ' !'
print(a.greeting, b.greeting)
Hello ! Hello !
각 인스턴스 속성도 변경된 것을 확인할 수 있다.
a.greeting += '!!!'
print(a.greeting, b.greeting, Human.greeting)
Hello !!!! Hello ! Hello !
반대로 a.greeting을 변경하면 공유되지 않는다.
+ 인스턴스 변수명과 클래스 변수명
class Human():
cnt = 1
def __init__(self):
self.cnt = 0
Sso = Human()
print(Sso.cnt)
print(Human.cnt)
0
1
인스턴스 변수와 클래스 변수명이 같아도 된다.
인스턴스에서 먼저 찾은 후 상위에서 찾게 된다.
class Human():
cnt = 1
Sso = Human()
print(Sso.cnt)
print(Human.cnt)
1
1
클래스 메소드
간단하게 말해서 self가 붙으면 인스턴스만의 속성과 메소드가 되고
self가 붙어있지 않으면 클래스의 속성과 메소드가 된다.
클래스 메소드는 클래스로 직접 호출을 해야한다.
# a.cmethod()
Human.cmethod()
a.cmethod()로 접근하면 에러가 난다.
인스턴스 메소드
인스턴스 메소드인 imethod를 보면 매개변수로 self를 받는다.
객체를 생성한 후 self에 인스턴스를 넘겨줘야 한다.
# Human.imethod()
Human.imethod(a)
a.imethod()
Human.imethod()로 접근하면 에러가 난다. (인스턴스를 넘겨주지 않았기 때문)
따라서 위에 생성한 인스턴스 a를 넘겨주거나 : Human.imethod(a)
인스턴스 자체로 호출하는 방법이 있다. : a.method()
'Python > 파이썬 초급' 카테고리의 다른 글
| [Python] from과 import (0) | 2023.05.22 |
|---|---|
| [Python] 생성자 소멸자 (0) | 2022.11.20 |
| [Python] import (0) | 2022.11.19 |
| [Python] 가변인자 (0) | 2022.11.14 |
| [Python] for-else 문 (0) | 2022.11.11 |