python

[python] class 중간 정리

전감자(◔◡◔) 2022. 9. 26. 21:09
'''
  분석단계
   고양이객체 추출 ===============> 클래스
   속성: 이름, 나이, 성별,.. =====> 인스턴스 변수
   동작: 먹기(), 자기(), 나이변경(),.... =======> 인스턴스 메서드
   실제 고양이 2마리
   이름: 야옹이
   나이: 2
   성별: 암컷
   이름: 나비
   나이: 3
   성별: 숫컷
'''

'''
   1. 로컬변수
      => self없는 변수들
      => 용도: 임시적으로 임의의 값을 저장하는 용도
      => 메서드 호출할때마다 생성 ~ 메소드 실행이 끝날때 제거

   2. 인스턴스 변수
      => self있는 변수들
      => 용도: 고양이(객체)의 속성 정보저장( 이름, 나이, 성별)
      => 객체 생성마다 매번 생성  ~ 객체 소멸할때 제거
       * 객체소멸 시점?
        ==> 참조하는 변수가 없을 때
'''


class Cat:
    # 생성자 ==> 역할: 인스턴스변수 초기화
    def __init__(self, username, age, gender):  # username, age, gender는 로컬변수, stack메모리에 생성
        # 인스턴스변수, B메모리(heap)에 저장
        self.username = username
        self.age = age
        self.gender = gender

    # setter 메서드
    def set_username(self, username):
        # 검증처리
        self.username = username

    def set_age(self, age):
        # 검증처리
        self.age = age

    def set_gender(self, gender):
        # 검증처리
        self.gender = gender

    # getter 메서드
    def get_username(self):
        return self.username

    def get_age(self):
        return self.age

    def get_gender(self):
        return self.gender


c1 = Cat("야옹이", 2, "암컷")  # 객체 소멸된다. 이유는 참조하는 변수가 없기 때문에
c2 = Cat("나비", 3, "숫컷")
c1 = Cat("이쁜", 1, "숫컷")
# 특정값 수정
c1.set_age(3)
# 조회1- 직접 인스턴스변수 접근
print("고양이1 정보, 이름:{},나이:{}, 성별:{}".format(c1.username, c1.age, c1.gender))
print("고양이1 정보,이름:{},나이:{}, 성별:{}".format(c2.username, c2.age, c2.gender))

# 조회2- 메서드 이용한 접근
print("고양이1 정보, 이름:{},나이:{}, 성별:{}".format(c1.get_username(), c1.get_age(), c1.get_gender()))
print("고양이2 정보, 이름:{},나이:{}, 성별:{}".format(c2.get_username(), c2.get_age(), c2.get_gender()))