Python 05-2 OOP

Seungju HwangΒ·2020λ…„ 10μ›” 9일
0

python

λͺ©λ‘ 보기
6/6
post-thumbnail

β—Ύ ν΄λž˜μŠ€μ™€ 객체

type: 곡톡 속성을 가진 κ°μ²΄λ“€μ˜ λΆ„λ₯˜(class)

class: κ°μ²΄λ“€μ˜ λΆ„λ₯˜(class)λ₯Ό μ •μ˜ν•  λ•Œ μ“°μ΄λŠ” ν‚€μ›Œλ“œ

클래슀 생성

  • 클래슀 생성은 class ν‚€μ›Œλ“œμ™€ μ •μ˜ν•˜κ³ μž ν•˜λŠ” <클래슀의 이름>으둜 κ°€λŠ₯ν•˜λ‹€.
  • <클래슀의 이름>은 PascalCase둜 μ •μ˜ν•œλ‹€.
  • 클래슀 λ‚΄λΆ€μ—λŠ” 데이터와 ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 있고, μ΄λ•Œ μ •μ˜λœ ν•¨μˆ˜λŠ” λ©”μ„œλ“œ(method)둜 λΆˆλ¦°λ‹€.
class <ν΄λž˜μŠ€μ΄λ¦„>:
    <λ©”μ†Œλ“œ>
    
class Person:
    pass
print(type(Person))
>> <class 'type'>

μΈμŠ€ν„΄μŠ€ 생성

  • μ •μ˜λœ 클래슀(class)에 μ†ν•˜λŠ” 객체λ₯Ό ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€(instance)라고 ν•œλ‹€.
  • Person 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” Person()을 ν˜ΈμΆœν•¨μœΌλ‘œμ¨ μƒμ„±λœλ‹€.
  • type() ν•¨μˆ˜λ₯Ό 톡해 μƒμ„±λœ 객체의 클래슀λ₯Ό 확인할 수 μžˆλ‹€.
  • person1은 μ‚¬μš©μžκ°€ μ •μ˜ν•œ(user-defined) Personμ΄λΌλŠ” 데이터 νƒ€μž…(data type)의 μΈμŠ€ν„΄μŠ€μ΄λ‹€.
# μΈμŠ€ν„΄μŠ€ = 클래슀()
person1 = Person()
print(type(person1))

>> <class '__main__.Person'>

λ©”μ„œλ“œ μ •μ˜β­β­

  • νŠΉμ • 데이터 νƒ€μž…(λ˜λŠ” 클래슀)의 객체에 κ³΅ν†΅μ μœΌλ‘œ 적용 κ°€λŠ₯ν•œ ν–‰μœ„(behavior)듀을 μ˜λ―Έν•œλ‹€.
class Person:
    # λ©”μ„œλ“œ(method)
    def talk(self):    # 인자둜 selfλ₯Ό λΆ™μ—¬μ€λ‹ˆλ‹€.
        return 'μ•ˆλ…•'
    def eat(self, food):
        return f'λƒ λƒ  {food}'
    

μƒμ„±μžλ©”μ„œλ“œ

  • constructor method

  • μΈμŠ€ν„΄μŠ€ 객체가 생성될 λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜

  • μƒμ„±μžλ₯Ό ν™œμš©ν•˜λ©΄ μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ μΈμŠ€ν„΄μŠ€μ˜ 속성을 μ •μ˜ν•  수 μžˆλ‹€.

def __init__(self):
    print('생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.')

μ†Œλ©Έμž λ©”μ„œλ“œ

  • desrtuctor method
  • μΈμŠ€ν„΄μŠ€ 객체가 μ†Œλ©Έ(파괴)되기 직전에 ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜.
def __del__(self):
    print('μ†Œλ©Έλ  λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.')

속성 μ •μ˜

  • νŠΉμ • 데이터 νƒ€μž…(λ˜λŠ” 클래슀)의 객체듀이 κ°€μ§€κ²Œ 될 μƒνƒœ/데이터λ₯Ό μ˜λ―Έν•œλ‹€
class Person:
    def __init__(self, name):
        self.name = name

    def talk(self):
        return f'μ•ˆλ…•, λ‚˜λŠ” {self.name}'
    
me = Person('λ©”μ‹œν˜Έλ‚ λ‘')
print(me.name)
>> λ©”μ‹œν˜Έλ‚ λ‘

λ§€μ§λ©”μ„œλ“œ

  • λ”λΈ”μ–Έλ”μŠ€μ½”μ–΄(__)κ°€ μžˆλŠ” λ©”μ„œλ“œλŠ” νŠΉλ³„ν•œ 일을 ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— μŠ€νŽ˜μ…œ λ©”μ„œλ“œ ν˜Ήμ€ 맀직 λ©”μ„œλ“œλΌκ³  λΆˆλ¦½λ‹ˆλ‹€.

  • 맀직(μŠ€νŽ˜μ…œ) λ©”μ„œλ“œ ν˜•νƒœ: __someting__

  • __new__, __reduce__ , __reduce_ex__ , __repr__ , __rmod__ , __rmul__ , __setattr__ , __sizeof__ , __str__

  • __str__(self)

    • νŠΉμ • 객체λ₯Ό 좜λ ₯(print()) ν•  λ•Œ 보여쀄 λ‚΄μš©μ„ μ •μ˜ν•  수 있음
    class Person:
        def __str__(self):
            return '객체 좜λ ₯(print)μ‹œ 보여쀄 λ‚΄μš©'

self

  • μΈμŠ€ν„΄μŠ€ μžμ‹ 
  • Pythonμ—μ„œ λ©”μ„œλ“œλŠ” 호좜 μ‹œ 첫번째 인자둜 μΈμŠ€ν„΄μŠ€ μžμ‹ μ΄ μ „λ‹¬λ˜κ²Œ μ„€κ³„λ˜μ—ˆλ‹€.
profile
κΈ°λ‘ν•˜λŠ” μŠ΅κ΄€μ€ μ‰½κ²Œ λ¬΄λ„ˆμ§€μ§€ μ•Šμ•„μš”.

0개의 λŒ“κΈ€