3 minute read

Inheritance


Category: Python, OOP

class Puppy:

  def __init__(self, name, breed, age):
    self.name = name
    self.breed = breed
    self.age = age

  def woof_woof(self):
    print("Woof Woof!")

  def introduce(self):
    self.woof_woof()
    print(f"My name is {self.name} and I am a baby {self.breed}")
    self.woof_woof()

teemo = Puppy(
  name="Teemo",
  breed="Goldendoodle",
  age=1.6
)

teemo.introduce()
  • classλŠ” ν•¨μˆ˜λ“€μ„ λ¬Άμ–΄μ£ΌλŠ” 역할을 ν•œλ‹€.
    • class ClassName: 클래슀 이름은 μ²«κΈ€μž λŒ€λ¬Έμž ν‘œκΈ°
  • def __init__(self) 은 객체(object)의 속성(attributes)을 μ΄ˆκΈ°ν™”ν•˜κ³  초기 μƒνƒœλ₯Ό μ„€μ •ν•œλ‹€.
    • def __init__(self, 속성1, 속성2, 속성3): self.속성1 = κ°’ self.속성2 = κ°’ self.속성3 = κ°’
  • objectname = Classname( 속성1="κ°’", 속성2="κ°’', 속성3="κ°’ ) 객체 이름은 μ†Œλ¬Έμž ν‘œκΈ°
  • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  땐 objectname.function()

ν΄λž˜μŠ€μ— 쀑볡이 λ§Žμ„ λ•ŒλŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν• κΉŒ?

class GuardDog:

  def __init__(self, name, breed):
    self.name = name
    self.breed = breed
    self.age = 5

  def rrrrr(self):
    print("stay away!")

class Puppy:

  def __init__(self, name, breed, age):
    self.name = name
    self.breed = breed
    self.age = age

  def woof_woof(self):
    print("Woof Woof!")
  • GuardDog ν΄λž˜μŠ€μ™€ Puppy ν΄λž˜μŠ€λŠ” λ‘˜ λ‹€ Dog λΌλŠ” 곡톡점이 μžˆλ‹€.
  • 이λ₯Ό 뽑아내 λΆ€λͺ¨ 클래슀λ₯Ό 생성할 수 μžˆλ‹€.

class Dog:

  def __init__(self, name, breed, age):
    self.name = name
    self.breed = breed
    self.age = age

class GuardDog(Dog):

  def rrrrr(self):
    print("stay away!")

class Puppy(Dog):

  def woof_woof(self):
    print("woof woof!")


teemo = Puppy(
  name="Teemo",
  breed="Goldendoodle",
)

leo = GuardDog(
  name="Leo",
  breed="Shepard"
)

print(leo)

# 좜λ ₯:
# TypeError: Dog.__init__() missing 1 required
# positional argument: 'age'
  • Dog 클래슀λ₯Ό 생성해 κ³΅ν†΅λ˜λŠ” 속성을 뽑아 __init__ λ©”μ„œλ“œλ‘œ μ΄ˆκΈ°ν™”ν•˜κ³  GuardDog ν΄λž˜μŠ€μ™€ Puppy 클래슀의 init λ©”μ„œλ“œλ₯Ό μ‚­μ œν–ˆλ‹€.
  • 이 λ•Œ μ‹€ν–‰ν•˜λ©΄ μ½˜μ†” μ°½μ—μ„œ νƒ€μž… μ—λŸ¬λ₯Ό 보게 λ˜λŠ”λ°, __init__ λ©”μ„œλ“œκ°€ 호좜될 λ•Œ ageλΌλŠ” λ§€κ°œλ³€μˆ˜μ— λŒ€ν•œ μœ„μΉ˜ 인수(κ°’)κ°€ λˆ„λ½λ˜μ—ˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
class Dog:

  def __init__(self, name, breed, age):
    self.name = name
    self.breed = breed
    self.age = age

  def sleep(self):
    print("zZzZzZzZzZ.....")

class GuardDog(Dog):

  def __init__(self, name, breed):
    super().__init__(
      name,
      breed,
      5,
    )

  def rrrrr(self):
    print("stay away!")

class Puppy(Dog):
  def __init__(self, name, breed):
    super().__init__(
      name,
      breed,
      0.1,
    )

  def woof_woof(self):
    print("woof woof!")


teemo = Puppy(
  name="Teemo",
  breed="Goldendoodle",
)

leo = GuardDog(
  name="Leo",
  breed="Shepard"
)

teemo.sleep()
leo.sleep()
  • super() 파이썬 ν•¨μˆ˜. 상속 κ΄€κ³„μ—μ„œ ChildClass μ—μ„œ ParentClass 의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λœλ‹€. ChildClass μ—μ„œ ParentClass 의 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ(μž¬μ •μ˜)ν•˜κ³ , κ·Έ μ˜€λ²„λΌμ΄λ“œλœ λ©”μ„œλ“œμ—μ„œ ParentClass 의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ‚¬μš©λœλ‹€.

PEP 8 (Python Enhancement Proposal 8)

When to Use Trailing Commas

μ‰Όν‘œλ₯Ό μ„ νƒμ μœΌλ‘œ 뒀에 λΆ™μ΄λŠ” μŠ€νƒ€μΌμ€ PEP 8 (Python Enhancement Proposal 8) μŠ€νƒ€μΌ κ°€μ΄λ“œμ— λͺ…μ‹œλ˜μ–΄ μžˆλ‹€. PEP 8은 파이썬 μ½”λ“œμ˜ μŠ€νƒ€μΌκ³Ό ꡬ쑰에 κ΄€ν•œ ꢌμž₯ 사항을 μ œμ‹œν•˜λŠ” 곡식 λ¬Έμ„œμ΄λ‹€. PEP 8μ—μ„œλŠ” μ—¬λŸ¬ μ€„λ‘œ λ‚˜μ—΄λœ μš”μ†Œλ“€μ˜ λ§ˆμ§€λ§‰μ— μ‰Όν‘œλ₯Ό μΆ”κ°€ν•˜λŠ” 것을 ꢌμž₯ν•˜κ³  μžˆλ‹€.

μ—¬λŸ¬ μ€„λ‘œ λ‚˜μ—΄λœ μš”μ†Œλ“€μ— λŒ€ν•œ κ΄€λ ¨ λ‚΄μš©μ€ PEP 8 λ¬Έμ„œμ˜ β€œWhen to use trailing commas” μ„Ήμ…˜μ— κΈ°μˆ λ˜μ–΄ μžˆλ‹€. 이 λΆ€λΆ„μ—μ„œλŠ” μ—¬λŸ¬ μ€„λ‘œ λ‚˜μ—΄λœ μš”μ†Œλ“€μ˜ λ§ˆμ§€λ§‰μ— μ‰Όν‘œλ₯Ό μΆ”κ°€ν•˜λŠ” 것이 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€κ³  μ„€λͺ…ν•˜κ³  μžˆλ‹€.

예λ₯Ό λ“€μ–΄, λ‹€μŒμ€ PEP 8에 따라 μ—¬λŸ¬ μ€„μ˜ μš”μ†Œλ₯Ό λ‚˜μ—΄ν•  λ•Œ μ‰Όν‘œλ₯Ό μ‚¬μš©ν•˜λŠ” μ˜ˆμ‹œμ΄λ‹€:

pythonCopy code
# PEP 8 μŠ€νƒ€μΌ
colors = [
    'red',
    'green',
    'blue',
]

# μ‰Όν‘œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ€ 경우
colors = [
    'red',
    'green',
    'blue'
]

μ‰Όν‘œλ₯Ό μ‚¬μš©ν•˜λ©΄ μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•  λ•Œ μ½”λ“œ 변경이 μš©μ΄ν•˜λ©°, μ½”λ“œ λ¦¬λ·°λ‚˜ 버전 관리 μ‹œμ—λ„ λ³€κ²½ λ‚΄μš©μ΄ λͺ…ν™•ν•˜κ²Œ ν‘œμ‹œλœλ‹€. μ΄λŸ¬ν•œ 이유둜 PEP 8μ—μ„œλŠ” μ‰Όν‘œλ₯Ό μ—¬λŸ¬ μ€„λ‘œ λ‚˜μ—΄λœ μš”μ†Œλ“€μ˜ λ§ˆμ§€λ§‰μ— μΆ”κ°€ν•˜λŠ” 것을 ꢌμž₯ν•˜κ³  μžˆλ‹€.

Python Code Test Practice

[PCCE 기좜문제] 6번 / 가채점 (디버깅 문제)

def solution(numbers, our_score, score_list):
    answer = []
    for i in range(len(numbers)):
        if our_score[i] == score_list[numbers[i]-1]:
            # debug: numbers[our_score[i]] == score_list[i]
            answer.append("Same")
        else:
            answer.append("Different")

    return answer
'''
range()λŠ” 0λΆ€ν„° 주어진 숫자 μ§μ „κΉŒμ§€μ˜ μ •μˆ˜λ₯Ό μƒμ„±ν•˜λŠ” ν•¨μˆ˜:
리슀트처럼 λ™μž‘ν•˜μ§€λ§Œ λ¦¬μŠ€νŠΈκ°€ μ•„λ‹ˆλ‹€.
이런 객체λ₯Ό 'μ΄ν„°λŸ¬λΈ”' 이라고 λΆ€λ₯Έλ‹€. for 루프와 같이 쓰인닀.
'''

for i in range(3):
    print(i)
# 좜λ ₯:
# 1
# 2
# 3

'''μŠ€ν…(step)을 μ§€μ •ν•˜λŠ” 것도 κ°€λŠ₯ν•˜λ‹€.'''

for i in range(2, 10, 2):
    print(i)
# 좜λ ₯:
# 2
# 4
# 6
# 8

'''len()은 μ‹œν€€μŠ€μ˜ 길이λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜:'''

my_list = [a, b, c]
length_of_list = len(my_list)
print(length_of_list)
# 좜λ ₯:
# 3

Tags:

Categories:

Updated: