본문 바로가기
Engineering WIKI/Python

Class Advanced

by wonos 2022. 4. 6.

클래스 변수, 인스턴스 변수

# 클래스 구조
# 구조 설계 후 재사용성 증가, 코드 반복 최소화, 메소드 활용

class Student():
	def __init__(self, name, number, grade, details):
		self._name = name
		self._number = number
		self._grade = grade
		self._details = details

	def __str__(self):
		return 'str : {} - {}'.format(self._name, self._number)

	def __retr__(self):
		return 'retr : {}'.format(self._name, self._number)

student1 = Student('Kim', 1, 1, {'gender' : 'Male', 'score1' : 95, 'score2' : 88})

 

클래스 상세 설명

# 클래스 재 선언
class Student():
	"""
		Student Class
		Author : wono.c
		Date : 2022.03.29
	"""
	
	# 클래스 변수
	student_count = 0

	def __init__(self, name, number, grade, details, email = None):
		# 인스턴스 변수 
		self._name = name
		self._number = number
		self._grade = grade
		self._details = details
		self._email = email
		
		Student.student_count += 1

	def __str__(self):
		return 'str {}'.format(self._name)

	def __repr__(self):
		return 'repr {}'.format(self._name)

	def detail_info(self):
		print('Current Id : {}'.format(id(self)))
		print('Student Detail Info : {} {} {}'.format(self._name, self._email, self._details)
	
	def __del__(self):
		Student.student_count -= 1

	# self 의미
	student1 = Student('cho', 2, 3, {'gender' : 'Male', 'score1' : 65, 'score2' : 55})
	student2 = Student('chang', 4, 1, {'gender' : 'Female', 'score1' : 85, 'score2' : 74})
	
	# ID 확인
	print(id(student1))
	print(id(student2))

	# dir & __dict__ 확인
	print(dir(student1))
	print(student1.__dict__)

	# Docstring    (클래스 주석 내용 확인 할 수 있다)
	print(Student.__doc__)

	# 인스턴스 변수
	# 직접 접근(PEP 문법적으로 권장 x)
	print(student1._name) # <- 직접 접근  / 변경 가능성 있다 아래 처럼
	# student1._name = 'choi' # 변경 가능성이 있으므로 좋지 않다
	
	# 인스턴스 네임스페이스 없으면 상위에서 검색
	# 즉, 동일한 이름으로 변수 생성 가능(인스턴스 검색 후 -> 상위(클래스 변수, 부모 클래스 변수)