๐ŸํŒŒ์ด์ฌ ํด๋ž˜์Šค ์ด์ •๋ฆฌ

๐ŸํŒŒ์ด์ฌ ํด๋ž˜์Šค

๋ช‡ ๋‹ฌ ์ „์— ํŒŒ์ด์ฌ ํด๋ž˜์Šค๋ฅผ ์ •๋ฆฌํ–ˆ์ง€๋งŒ ๊ทธ๋•Œ๋ณด๋‹ค ์ดํ•ด์˜ ํญ์ด ๋” ๋„“์–ด์กŒ๊ณ  ์„ค๋ช…๋„ ๋” ์ž์„ธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํด๋ ˆ์Šค์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ์ •๋ฆฌํ•œ๋‹ค.

๐ŸŸํด๋ž˜์Šค ์ƒ์„ฑ

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๊ฐ€ ๊ตณ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์˜๊ฒฌ์ด ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค.
  • ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ  ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋กœ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ