goodthings4me.tistory.com
■ 객체 변수의 선언과 초기화
# 아래 클래스에서 메서드 정의만 보이고 변수 선언은 없지만, 파이썬은 객체에 필요한 변수 i를 알아서 생성해준다. i변수가 생성되는 시점은 객체 내에서 해당 변수를 대상으로 대입연산을 처음 진행하는 순간임
class Simple1:
def set_i(self, i):
self.i = i
def get_i(self):
return self.i
s1 = Simple1()
s1.set_i(200) # 객체 내 변수 i 생성, 200 대입(할당)
print(s1.get_i()) # 200
s12 = Simple1()
#s12.get_i() # 객체 내 i 변수 미생성 단계에서 호출하면 오류 발생
# AttributeError: 'Simple' object has no attribute 'i'
# 클래스 정의할 때, 객체 생성 시 자동으로 호출되는 __init__ 메서드 정의로 객체 내 필요한 모든 변수를 초기화한다.
class Simple2:
def __init__(self):
self.i = 0
def set_i(self, i):
self.i = i
def get_i(self):
return self.i
s2 = Simple2() # 객체 생성과 변수 초기화 완료
print(s2.get_i()) # 0
■ 파이썬 클래스와 객체의 독특한 특성
# 객체 생성 후 변수와 메서드 추가하는 특성
class Simple3:
def get_i(self):
return self.i
s3 = Simple3()
s3.i = 20 # 생성된 객체에 변수 i 추가, 값 20 대입
print(s3.get_i()) # 20
s3.hello = lambda : print('hi~~') # 생성된 객체에 hello() 메서드 추가
print(s3.hello())
# 클래스에 변수 추가하기
class Simple4:
def __init__(self, i):
self.i = i
def get_i(self):
return self.i
Simple4.n = 7 # 클래스 변수 n 추가, 초기화
# 클래스에 직접 클래스 변수를 만들 수 있다.
s4 = Simple4(5)
print(s4.i) # 5
print(s4.get_i()) # 5
print(Simple4.n) # 7
print(s4.n) # 7
# 객체에 찾는 변수가 없으면 클래스에서 그 변수를 찾는다.
# 자료형 확인 시 사용하는 type의 정체
print(type(type)) # <class 'type'> - 클래스임
print(type([1, 2])) # <class 'list'> - [1, 2]는 list 클래스의 객체
print(type(list)) # <class 'type'> - list는 type 클래스의 객체
print(type(tuple)) # <class 'type'>
print(type(str)) # <class 'type'>
print(type(int)) # <class 'type'>
print(type(bool)) # <class 'type'>
print(type(Simple4)) # <class 'type'>
# Simple4 클래스도 type 클래스의 객체임
#### 클래스는 type이라는 클래스의 객체이다.
#### 고로, 객체를 대상으로 할 수 있는 것 대부분을 클래스를 대상으로도 할 수 있다.
# 클래스가 객체이기 때문에 변수에 클래스를 담을 수 있다.
Simple4.x = 10
Simple4.y = 20
simple = Simple4
ss1 = simple(10)
ss2 = simple(20)
print(ss1.get_i(), ss1.n, ss1.x, ss1.y) # 10 7 10 20
print(ss2.get_i(), ss2.n, ss1.x, ss1.y) # 10 7 10 20
참고자료 : 윤성우의 열혈파이썬 중급편
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 파일 쓰기, 읽기 - open(), read(), readline(), readlines() (0) | 2020.09.11 |
---|---|
[python] 파이썬 클래스 상속(inheritance) (0) | 2020.09.10 |
[python] 파이썬 sort(), sorted() 알아보기 (0) | 2020.09.08 |
[python] 파이썬 enumerate와 문자열 비교 (0) | 2020.09.08 |
[python] 파이썬 시간 관련 함수, time() datetime() timezone() (0) | 2020.09.08 |
댓글