🐍파이썬 클래슀 총정리

νŒ”λ¦¬λ™Β·2021λ…„ 7μ›” 5일
0

🐍파이썬 클래슀

λͺ‡ 달 전에 파이썬 클래슀λ₯Ό μ •λ¦¬ν–ˆμ§€λ§Œ κ·Έλ•Œλ³΄λ‹€ μ΄ν•΄μ˜ 폭이 더 λ„“μ–΄μ‘Œκ³  μ„€λͺ…도 더 μžμ„Έν•˜κ²Œ ν•  수 μžˆμ–΄μ„œ ν΄λ ˆμŠ€μ— λŒ€ν•΄μ„œ λ‹€μ‹œ μ •λ¦¬ν•œλ‹€.

🐟클래슀 생성

class Idol_member(object):

    def __init__(self, name, group, gender, age, agency):
        self._name = name
        self._group = group
        self._gender = gender 
        self._age = age
        self._agency = agency 
    
    def __str__(self):
        return f'이름: {self._name}'

    def __repr__(self):
        return f'κ·Έλ£Ήλͺ… : {self._group}'
       
  • νŒŒμ΄μ¬μ—μ„œ 클래슀λ₯Ό μƒμ„±ν•˜λ©΄ objectλ₯Ό μžλ™μœΌλ‘œ μƒμ†ν•œλ‹€.

    • κ΄„ν˜Έ μ•ˆμ— objectλŠ” μƒλž΅ κ°€λŠ₯ν•˜λ‹€.
  • __init__λ©”μ†Œλ“œλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μžˆλ‹€.

    • ex. idol_member1 = Idol_member('μ‹œμš°λ―Ό', 'μ—‘μ†Œ', 'λ‚¨μž', 32, 'SMμ—”ν„°ν…ŒμΈλ¨ΌνŠΈ')
      idol_member1λ³€μˆ˜μ— Idol_memberν΄λž˜μŠ€μ— 인자λ₯Ό λ„£μ–΄μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€.
  • μƒμ„±ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό ν”„λ¦°νŠΈν•΄λ³΄μž
    print(idol_member1) -> 이름: μ‹œμš°λ―Ό

  • __str__λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄
    <__main__.Idol_member object at 0x7f8ba8110fd0> -> 객체가 λ¦¬ν„΄λœλ‹€.

__str__λ©”μ†Œλ“œλŠ” 클래슀λ₯Ό 쑰회 ν•  λ•Œ ν‘œμ‹œ λ˜λŠ” 정보λ₯Ό κ΅¬ν˜„ν•œλ‹€.
μž₯κ³  λͺ¨λΈμ—μ„œ μ‚¬μš© ν•˜λ©΄ λͺ¨λΈ 객체 이름 λŒ€μ‹  ν‘œν˜„ν•  것을 κ΅¬ν˜„ ν•  수 μžˆλ‹€.

  • __repr__λ©”μ†Œλ“œλŠ” __str__λ©”μ†Œλ“œκ°€ μ—†μœΌλ©΄ ν˜ΈμΆœλœλ‹€.
    repr(idol_member)μ΄λŸ°μ‹μœΌλ‘œ 호좜 ν•  μˆ˜λ„ μžˆλ‹€.

πŸ““ν΄λž˜μŠ€ λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜

  • μ•„μ΄λŒ 멀버 클래슀λ₯Ό λ§Œλ“€μ–΄λ³΄μž.
class Idol_member(object):
    """
    Idol_member class
    Aythor : sdk 
    Date : 210705
    """
    # 클래슀 λ³€μˆ˜ 
    member_count = 0

    def __init__(self, name, group, gender, age, agency, song=None):
        # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 
        self._name = name
        self._group = group
        self._gender = gender 
        self._age = age
        self._agency = agency 
        self._song = song

        Idol_member.member_count +=1

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

    def __repr__(self):
        return f'repr : {self._group}'

    def detail_info(self):
        print(f'Current Id: {id(self)}')
        print(f'Member Detail Info : {self._name} {self._group} {self._gender}')

    def __del__(self):
        Idol_member.member_count -= 1
  • λ©€λ²„μ˜ 이름과 κ·Έλ£Ήλͺ… 성별 λ‚˜μ΄ μ†Œμ†μ‚¬ λ…Έλž˜λ₯Ό 인자둜 λ°›λŠ” ν΄λž˜μŠ€μ΄λ‹€.

  • 클래슀 λ³€μˆ˜ membercountλ₯Ό μ„ μ–Έν–ˆλ‹€.

    • μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 λ•Œ λ§ˆλ‹€ membercountλ³€μˆ˜κ°€ 1μ”© μ¦κ°€ν•œλ‹€.
  • μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•΄μ£Όμž

member1 = Idol_member('카이', 'μ—‘μ†Œ', 'male', 28, 'SMμ—”ν„°ν…ŒμΈλ¨ΌνŠΈ')
member2 = Idol_member('슬기', 'λ ˆλ“œλ²¨λ²³', 'female', 28, 'SMμ—”ν„°ν…ŒμΈλ¨ΌνŠΈ', 'psycho')
  • λ©”μ†Œλ“œμ— μ ‘κ·Όν•  λ•ŒλŠ” μΈμŠ€ν„΄μŠ€μ— '.' 을 찍고 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
member1.detail_info()
# Current Id: 140248082366416
# Member Detail Info : 카이 μ—‘μ†Œ male
member2.detail_info() 
# Current Id: 140248082366368
# Member Detail Info : 슬기 λ ˆλ“œλ²¨λ²³ female
  • μ—λŸ¬

    Idol_member.detail_info() -> μ—λŸ¬
    ν΄λž˜μŠ€μ—λ‹€κ°€ λ°”λ‘œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ—λŸ¬κ°€λ‚œλ‹€. μ°Έμ‘°ν•  객체가 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€.
    μ‰½κ²Œ 말해 Idol_memberλŠ” 클래슀λ₯Ό μ°μ–΄λ‚΄λŠ” 틀이지 찍어낸 결과물이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ΄λ‹€.
    κ·Έλž˜μ„œ self의 μ˜λ―ΈλŠ” 객체의 μΈμŠ€ν„΄μŠ€ κ·Έ μžμ²΄λ‹€.

  • μΈμŠ€ν„΄μŠ€λ³€μˆ˜μ— μ ‘κ·Ό
    member2._name = '슬기2μ΄λ ‡κ²Œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— λ°”λ‘œ μ ‘κ·Όν•  수 μžˆμ§€λ§Œ ꢌμž₯λ˜μ§€λŠ” μ•ŠλŠ” 방법이닀.
    print(member2._name) -> 슬기2

  • 클래슀 λ³€μˆ˜ μ ‘κ·Ό
print(member1.member_count) -> 2
print(member2.member_count) -> 2
print(Idol_member.member_count) -> 2

클래슀 λ³€μˆ˜λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλ‹€.
클래슀 ν‹€μ—μ„œλ„ μ ‘κ·Όν•  수 μžˆλ‹€.

⭐️클래슀 λ©”μ†Œλ“œ, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ, μŠ€ν…Œν‹± λ©”μ†Œλ“œ

μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ

class exo_member(object):
    '''
    Idol_member
    Author : sdk
    Date : 210705
    '''

    #class λ³€μˆ˜ 
    korea_album_count = 21

    def __init__(self, realname, nickname, age, ability, solo_album=0):
        self._realname = realname
        self._nickname = nickname
        self._age = age 
        self._ability = ability
        self._solo_album = solo_album 

    # instance method 
    def names(self):
        return f'{self._realname} : {self._nickname}'

    def detail_info(self):
        return f'Member Detail Info : {self._realname} {self._nickname} {self._age} λŠ₯λ ₯ : {self._ability} μ†”λ‘œμ•¨λ²” 개수: {self._solo_album}'

    def get_solo_album_count(self):
        return f'{self._nickname}의 μ†”λ‘œμ•¨λ²” 개수 : {self._solo_album}'
    
    def get_all_album_count(self):
        return f'{self._nickname}의 μ†”λ‘œμ•¨λ²” 개수 + κ·Έλ£Ή μ—˜λ²” 개수 : {self._solo_album + exo_member.korea_album_count}'

    def __str__(self):
        return f'{self.detail_info()}'
  • exoλ©€λ²„λ“€μ˜ 정보λ₯Ό λ°›λŠ” 클래슀λ₯Ό μƒμ„±ν–ˆλ‹€.

  • 클래슀 λ³€μˆ˜ korea_album_countλŠ” 2020λ…„κΉŒμ§€ μ—‘μ†Œκ°€ ν•œκ΅­μ—μ„œ λ°œλ§€ν•œ μ•¨λ²”μ˜ μˆ˜λŸ‰μ„ λ‚˜νƒ€λ‚Έλ‹€.

  • κ·Έμ™Έ 이름을 좜λ ₯ν•˜λŠ” names, μžμ„Έν•œ 정보λ₯Ό 좜λ ₯ν•˜λŠ” detail_info 멀버별 μ†”λ‘œμ•¨λ²” 발맀수λ₯Ό 좜λ ₯ν•œλŠ” get_solo_album_countν•¨μˆ˜λ“±μ„ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλΌκ³  λΆ€λ₯Έλ‹€.

    • μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλŠ” 인자둜selfκ°€ κΌ­ μžˆμ–΄μ•Όν•œλ‹€.
      κ°μ²΄μžμ‹ μ„ μ°Έμ‘°ν•˜κΈ° λ•Œλ¬Έ

클래슀 λ©”μ†Œλ“œ

  • 클래슀 λ³€μˆ˜μ— μ ‘κ·Όν•˜λ €λ©΄
    exo_member.korea_album_count = 22μ΄λ ‡κ²Œ μ ‘κ·Όν•  수 μžˆμ§€λ§Œ 클래슀 λ³€μˆ˜μ— 직접 μ ‘κ·Όν•˜λŠ” 것은 ꢌμž₯λ˜μ§€ μ•ŠλŠ”λ‹€.(pep8)

  • μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 클래슀 λ©”μ†Œλ“œλ₯Ό μ“Έ 수 μžˆλ‹€.

  • κΈ°μ‘΄ exo_memberν΄λž˜μŠ€μ— μ•„λž˜ μ½”λ“œλ₯Ό μΆ”κ°€ ν•΄μ€€λ‹€.

@classmethod
def raise_album_count(cls, count):
    if count < 1:
        print('1 이상을 μΆ”κ°€ν•΄μ£Όμ„Έμš”.')
        return
        cls.korea_album_count += count
        print('앨범 개수 μΆ”κ°€κ°€ λ°˜μ˜λμŠ΅λ‹ˆλ‹€.')
  • μ΄λ ‡κ²Œ ν•˜λ©΄ ν΄λž˜μŠ€μ—μ„œλ„ 접근이 κ°€λŠ₯ν•˜λ‹€.

  • 인자둜 λ°›λŠ” clsλŠ” 클래슀 자체 즉 exo_member이닀.

  • 2021λ…„κΈ°μ€€μœΌλ‘œ μ—‘μ†Œμ˜ ν•œκ΅­ 앨범 발맀 κ°œμˆ˜λŠ” 22κ°œμ΄λ―€λ‘œ 1개λ₯Ό μΆ”κ°€ν•΄λ³΄μž.
    exo_member.raise_album_count(1)

  • 변경사항을 좜λ ₯ν•΄λ³΄μž

print(member1.get_all_album_count())
# -> μ‹œμš°λ―Όμ˜ μ†”λ‘œμ•¨λ²” 개수 + κ·Έλ£Ή μ—˜λ²” 개수 : 22
  • μΈμŠ€ν„΄μŠ€ 생성도 클래슀 λ©”μ†Œλ“œλ₯Ό ν• μš©ν•΄μ„œ ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.
@classmethod
def add_member(cls, realname, nickname, age, ability, solo_album=0):
        return cls(realname, nickname, age, ability, solo_album)
  • κΈ°μ‘΄μ—λŠ” μ΄λ ‡κ²Œ μ •μ˜ ν–ˆλ‹€λ©΄
member1 = exo_member('김민석', 'μ‹œμš°λ―Ό',32, 'κ²°λΉ™')
  • μ΄λ ‡κ²Œ μ •μ˜ν•˜λ©΄ μ΄λŸ°μ‹μœΌλ‘œ μΈμŠ€ν„΄μŠ€λ₯Ό 생성 ν•  수 μžˆλ‹€.
ember4 = exo_member.add_member('λ„κ²½μˆ˜', 'λ””μ˜€', 30, '힘')
member5 = exo_member.add_member('김쒅인', '카이', 28, 'μˆœκ°„μ΄λ™', 1)
  • μž₯κ³ μ—μ„œ 이런 클래슀 λ©”μ†Œλ“œλ₯Ό μ“΄ 것을 자주 λ³Ό 수 μžˆλ‹€.

μŠ€ν…Œν‹± λ©”μ†Œλ“œ

  • λ©€λ²„λ“€μ˜ μ†”λ‘œμ•¨λ²” 유무λ₯Ό μ•Œλ €μ£ΌλŠ” λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄λ³΄μž

μŠ€ν…Œν‹± λ©”μ†Œλ“œ λ―Έμ‚¬μš©μ‹œ

def is_solo(inst):
    if inst._solo_album > 0:
        return f'{inst._nickname}은 μ†”λ‘œμ•¨λ²”μ„ {inst._solo_album}μž₯ 발맀 ν–ˆμŠ΅λ‹ˆλ‹€.'
    return f'{inst._nickname}은 μ†”λ‘œμ•¨λ²”μ„ λ°œλ§€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.'
  • 클래슀 λ°–μ—μ„œ μ„ μ–Έν•΄μ„œ μ“Έ 수 μžˆλ‹€.

  • 좜λ ₯ 해보면

print(is_solo(member1))
# -> μ‹œμš°λ―Όμ€ μ†”λ‘œμ•¨λ²”μ„ λ°œλ§€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ 써도 λ˜μ§€λ§Œ ν΄λž˜μŠ€μ™€ μ—°κ²°λ˜μ–΄ μžˆλŠ” λŠλ‚Œμ΄λ‹ˆ ν΄λž˜μŠ€μ•ˆμ— μ§‘μ–΄ λ„£μ–΄λ³΄μž.

μŠ€ν…Œν‹± λ©”μ†Œλ“œ μ‚¬μš©μ‹œ

 @staticmethod
 def is_solo(inst):
    if inst._solo_album > 0:
        return f'{inst._nickname}은 μ†”λ‘œμ•¨λ²”μ„ {inst._solo_album}μž₯ 발맀 ν–ˆμŠ΅λ‹ˆλ‹€.'
    return f'{inst._nickname}은 μ†”λ‘œμ•¨λ²”μ„ λ°œλ§€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.'
  • staticmethodλ°μ½”λ ˆμ΄ν„°λ₯Ό λ‹¬μ•„μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λ©΄ selfλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
  • 좜λ ₯ν•΄λ³΄μž
print(exo_member.is_solo(member3))
-> λ°±ν˜„μ€ μ†”λ‘œμ•¨λ²”μ„ 4μž₯ 발맀 ν–ˆμŠ΅λ‹ˆλ‹€.
  • ν΄λ ˆμŠ€μ— 직접 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•΄μ„œ μΈμŠ€ν„΄μŠ€λ₯Ό 인자둜 λ„˜κΈΈ 수 μžˆλ‹€.
  • μΈμŠ€ν„΄μŠ€λ‘œλ„ μ ‘κ·Όν•  수 μžˆλ‹€.
print(member4.is_solo(member4))
-> λ””μ˜€μ€ μ†”λ‘œμ•¨λ²”μ„ λ°œλ§€ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
  • μš”μ¦˜μ€ staticmethodκ°€ ꡳ이 ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” 의견이 λ§Žλ‹€κ³  ν•œλ‹€.
  • 클래슀 λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„ν•  수 있고 μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ‘œλ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.
profile
λ°°μ›€μ˜ 기둝

0개의 λŒ“κΈ€