객체가 변수와 메서드를 가지는 것 처럼 클래스도 변수와 메서드를 가질 수 있다.
클래스 변수
표현 방법
class 클래스이름:
클래스 변수 = 값
클래스 변수에 접근하는 방법
클래스이름.변수이름
class Korean:
country = "한국" # 클래스 변수 country
def __init__(self, name, age, address):
self.name = name # 인스턴스변수 self.name
self.age = age # 인스턴스변수 self.age
self.address = address # 인스턴스변수 self.address
man = Korean("홍길동", 35, "서울")
print(man.name)
# 결과값
# 홍길동
print(Korean.name)
# 결과값
# AttributeError: type object 'Korean' has no attribute 'name'
print(man.country)
# 결과값
# 한국
print(Korean.country)
# 결과값
# 한국
클래스 변수와 인스턴스 변수
class Person:
bag = []
def put_bag(self, stuff):
Person.bag.append(stuff)
james = Person()
james.put_bag("책")
maria = Person()
maria.put_bag("열쇠")
print(james.bag)
print(maria.bag)
print(Person.bag)
# 결과값
# ['책', '열쇠']
# ['책', '열쇠']
# ['책', '열쇠']
클래스 변수에는 객체로도 접근할 수 있고 값도 추가 삭제 변경이 모두 가능하다.
class Person:
bag = []
def __init__(self):
self.bag = []
def put_bag(self, stuff):
Person.bag.append(stuff)
def put_mybag(self, stuff):
self.bag.append(stuff)
james = Person()
james.put_mybag("책")
james.put_bag("사전")
maria = Person()
maria.put_mybag("열쇠")
maria.put_bag("자물쇠")
# 같은 이름의 인스턴스 변수와 클래스 변수가 존재할 때는 인스턴스 변수 우선
print(james.bag)
print(maria.bag)
print(Person.bag)
# 결과값
# ['책']
# ['열쇠']
# ['사전', '자물쇠']
위의 코드를 봤을 때는 클래스 변수와 객체 변수 이름이 같은 것을 확인 할 수 있는데 이 때는 객체에서 사용된 변수가 우선되는것을 확인할 수 있다.
클래스 메서드
인스턴스 또는 클래스로 호출할 수 있고 생성된 인스턴스가 없어도 호출이 가능하다.
클래스 메서드에는 @classmethod 데코레이터를 표시하고 작성해야 한다.
매개변수 cls 를 사용하고 클래스.메서드() 형태로 사용한다.
인스턴스 변수에는 접근할 수 없지만 클래스 변수에는 접근이 가능하다.
주로 인스턴스의 상태를 변화시키지 않는 메서드를 만들 때 사용한다.
표현 방법
class 클래스이름:
@classmethod
def 클래스함수명(cls, 매개변수):
pass
class Korean:
country = "한국"
@classmethod
def trip(cls, country):
if cls.country == country:
print("국내 여행")
else:
print("해외 여행")
Korean.trip("한국")
# 국내 여행
Korean.trip("미국")
# 해외 여행
클래스 변수와 클래스 메서드 모두 사용하기
class Student:
# 클래스 변수
count = 0
students = []
@classmethod
def print(cls):
print("------ 학생 목록 ------")
print("이름\t총점\t평균")
for student in cls.students:
print(str(student))
print("------ ------ ------")
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
Student.count += 1
Student.students.append(self)
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum() / 4
def __str__(self):
return f"{self.name}\t{self.get_sum()}\t{self.get_average()}"
students = [Student("윤인성", 87, 98, 88, 95),
Student("연하진", 95, 98, 96, 98),
Student("구지연", 76, 96, 94, 90)]
# 현재 생성된 학생을 모두 출력
Student.print()
# 결과값
# ------ 학생 목록 ------
# 이름 총점 평균
# 윤인성 368 92.0
# 연하진 387 96.75
# 구지연 356 89.0
# ------ ------ ------'Python' 카테고리의 다른 글
| 파이썬 프라이빗 변수와 getter, setter (1) | 2023.05.10 |
|---|---|
| 파이썬 가비지 컬렉터 (1) | 2023.05.10 |
| 파이썬 특수한 이름의 메서드 (1) | 2023.05.10 |
| 파이썬 isinstance 함수 (0) | 2023.05.09 |
| 파이썬 소멸자 (0) | 2023.05.09 |