오늘은 “한 번에 끝내는 파이썬 웹 개발 초격차 패키지 Online” 의 파트 2의 여러가지 속성을 듣고 정리해보았다. 참고로 이 포스팅은 공부용으로 강의 내용을 요약한 것으로 자세한 강의 내용은 위 링크를 참조 할 것.



아래는 공부 인증 사진.


2022-06-11-Python-Photo1

2022-06-11-Python-Photo2



02. 여러가지 속성

1. 인스턴스 속성

  • 객체마다 다르게 가지는 속성
class Unit:
    # 생성자 (constructor)
    # 객체를 생성할 떄 호출되는 메서드
    def __init__(self, name, hp, shield, demage):
        **self.name = name # self 는 객체 자기 자신을 의미
        self.hp = hp
        self.shield = shield
        self.demage = demage**
        print(f"[{self.name}](이)가 생성 되었습니다.")

    # 객체를 출력할 때 호출되는 메서드
    def __str__(self):
        return f"[{self.name}] 체력 : {self.hp} 실드: {self.shield} 공격력: {self.demage}"

# 프로브 객체를 생성
probe = Unit("프로브", 20, 20, 5)

# 질럿 객체를 생성
zealot = Unit("질럿", 100, 60, 16)

# 드라군 객체를 생성
dragoon = Unit("드라군", 100, 80, 20)
  • self.xx 라고 되어있는 부분이 인스턴스 속성을 가리키는 부분
  • 인스턴스 속성 사용법
    • 클래스 안: self.속성명
    • 클래스 밖: 객체명.속성명



2. 클래스 속성

  • 모든 객체가 공유하는 속성
class Unit:
    **count = 0**
    def __init__(self, name, hp, shield, demage):
        self.name = name # self 는 객체 자기 자신을 의미
        self.hp = hp
        self.shield = shield
        self.demage = demage
        **Unit.count += 1**
  • 생성된 유닛 개수를 세는 속성을 생성해보자 ⇒ 클래스 속성
  • 생성자 바깥에 속성 정의 + 생성자 마지막 속성 뒤에 Unit.count 작성
  • 클래스 속성 사용법:
    • 클래스 안: 클래스명.속성명
    • 클래스 밖: 클래스명.속성명



3. 비공개 속성

  • 클래스 안에서만 접근 가능한 속성
class Unit:
    def __init__(self, name, hp, shield, demage):
        self.name = name # self 는 객체 자기 자신을 의미
        **self.__hp = hp**
        self.shield = shield
        self.demage = demage

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)
  • hp라는 속성을 클래스 외부에서 접근할 수 없도록 만들 때 사용
  • zealot.__hp = 9999 로 변경 불가



4. 실습

1. 인스턴스 속성

class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
    -> 객체마다 다른 값을 가지는 속성
    """
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.hp = hp
        self.shield = shield
        self.demage = demage
        print(f"[{self.name}](이)가 생성 되었습니다.")
    def __str__(self):
        return f"[{self.name}] 체력 : {self.hp} 실드: {self.shield} 공격력: {self.demage}"

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)

# 인스턴스 속성 수정
probe.demage += 1
print(probe)
  • self.name , self.hp , self.shield , self.demage ⇒ 인스턴스 속성
  • 인스턴스(객체)마다 다른 값을 가진다.
    • 예: probe, zealot, dragoon은 각각 다른 이름, 체력, 방어막, 공격력을 가진다
  • 클래스 외부에서 접근 시에는 객체명.속성명 (예: probe.demage)으로 접근한다.

  • 실행결과
(myvenv) ➜  python_advanced git:(master)/Users/usr/Documen
ts/python_advanced/myvenv/bin/python /Users/jinipark/usr/pyt
hon_advanced/myvenv/Chapter04/02.여러가지속성.py
[프로브]()가 생성 되었습니다.
[질럿]()가 생성 되었습니다.
[드라군]()가 생성 되었습니다.
[프로브] 체력 : 20 실드: 20 공격력: 6



2. 클래스 속성

class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
    -> 객체마다 다른 값을 가지는 속성

    클래스 속성 : 전체 유닛 개수
    -> 모든 객체가 공유하는 속성
    """
    count = 0
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.hp = hp
        self.shield = shield
        self.demage = demage
        Unit.count += 1
        print(f"[{self.name}](이)가 생성 되었습니다.")
    def __str__(self):
        return f"[{self.name}] 체력 : {self.hp} 실드: {self.shield} 공격력: {self.demage}"

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)

# 인스턴스 속성 수정
probe.demage += 1
print(probe)

# 전체 유닛 개수
print(Unit.count)
  • 클래스 속성 count 를 생성해보자(생성자 앞에서 생성)
  • 모든 객체가 공유하는 속성이다.
  • 클래스명.클래스속성 으로 호출할 수 있다.
    • 예: Unit.count

  • 실행결과
(myvenv) ➜  python_advanced git:(master)/Users/usr/Documen
ts/python_advanced/myvenv/bin/python /Users/jinipark/usr/pyt
hon_advanced/myvenv/Chapter04/02.여러가지속성.py
[프로브]()가 생성 되었습니다.
[질럿]()가 생성 되었습니다.
[드라군]()가 생성 되었습니다.
[프로브] 체력 : 20 실드: 20 공격력: 6
3



3. 비공개 속성

class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
    -> 객체마다 다른 값을 가지는 속성

    클래스 속성 : 전체 유닛 개수
    -> 모든 객체가 공유하는 속성

    비공개 속성 : 
    -> 클래스 안에서만 사용 가능한 속성
    """
    count = 0
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.__hp = hp
        self.shield = shield
        self.demage = demage
        Unit.count += 1
        print(f"[{self.name}](이)가 생성 되었습니다.")
    def __str__(self):
        return f"[{self.name}] 체력 : {self.__hp} 실드: {self.shield} 공격력: {self.demage}"

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)

# 인스턴스 속성 수정
probe.demage += 1
print(probe)

# 비공개 속성 접근
probe.__hp = 9999
print(probe)

# 전체 유닛 개수
print(Unit.count)
  • 인스턴스 속성 hp를 비공개 속성으로 바꾸어 보자(self.__hp)
  • 클래스 안에서만 사용 가능한 속성이다.
  • 클래스 안에서 선언 시 __ 를 속성명 앞에 붙여준다.

  • 실행결과
(myvenv) ➜  python_advanced git:(master)/Users/usr/Documen
ts/python_advanced/myvenv/bin/python /Users/jinipark/usr/pyt
hon_advanced/myvenv/Chapter04/02.여러가지속성.py
[프로브]()가 생성 되었습니다.
[질럿]()가 생성 되었습니다.
[드라군]()가 생성 되었습니다.
[프로브] 체력 : 20 실드: 20 공격력: 6
[프로브] 체력 : 20 실드: 20 공격력: 6
3
  • 클래스 외부에서 hp 속성에 접근할 수 없다.

  • 네임 맹글링(name mangling)을 이용해 접근해보자.
class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
    -> 객체마다 다른 값을 가지는 속성

    클래스 속성 : 전체 유닛 개수
    -> 모든 객체가 공유하는 속성

    비공개 속성 : 
    -> 클래스 안에서만 사용 가능한 속성
    """
    count = 0
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.__hp = hp
        self.shield = shield
        self.demage = demage
        Unit.count += 1
        print(f"[{self.name}](이)가 생성 되었습니다.")
    def __str__(self):
        return f"[{self.name}] 체력 : {self.__hp} 실드: {self.shield} 공격력: {self.demage}"

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)

# 인스턴스 속성 수정
probe.demage += 1
print(probe)

# 비공개 속성 접근
probe.__hp = 9999
print(probe)

# 네임 맹글링 (name mangling)
probe._Unit__hp = 9999
print(probe)

# 전체 유닛 개수
print(Unit.count)

  • 실행 결과
(myvenv) ➜  python_advanced git:(master)/Users/usr/Documen
ts/python_advanced/myvenv/bin/python /Users/jinipark/usr/pyt
hon_advanced/myvenv/Chapter04/02.여러가지속성.py
[프로브]()가 생성 되었습니다.
[질럿]()가 생성 되었습니다.
[드라군]()가 생성 되었습니다.
[프로브] 체력 : 20 실드: 20 공격력: 6
[프로브] 체력 : 20 실드: 20 공격력: 6
[프로브] 체력 : 9999 실드: 20 공격력: 6
3
  • 체력 속성 값이 변경되었다.
  • 비공개 속성은 클래스 외부에서의 접근을 완전히 차단하는 것이 아닌, 이름 규칙을 까다롭게 만든 것이라는 것을 알 수 있다.



이번 포스팅에서는 강의의 파트 2의 여러가지 속성를 알아보았다. 다음 포스팅에서는 여러가지 메서드를 알아보도록 하자.


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.



#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #캐시백챌린지 #캐시백 #환급챌린지 #한번에끝내는파이썬웹개발초격차패키지Online