본문 바로가기

개발/Python

부스트캠프 AI Tech 3기 Pre-Course [2]-2 객체 지향 언어의 특징

상속 : Inheritance

부모클래스로부터 속성과 method를 자식클래스가 물려받게 만드는 것

class Person(object):
    def __init__(self, name,age):
        self.name=name
        self.age=age
        
    def about_me(self):
        print("이름은 {}, 나이는 {}입니다.".format(self.name,self.age))
        
 #person이라는 부모클래스를 korean이라는 클래스에 상속
 class Korean(Person):
 	pass
    
k1=Korean("yo", 33)
print(k1)
>>이름은 yo, 나이는 33입니다.

 

super() : 자기 자신의 부모 클래스를 사용

부모 클래스가 가진 속성을 불러낼 수 있다.

class Employee(Person):
    def __init__(self, name, age, salary, hire_date):
        super().__init__(name,age)
        self.salary=salary
        self.hire_date=hire_date
        
    def about_me(self):
    	super().about_me()
        print("급여는 {}원, 입사일은 {}입니다.".format(self.salary, self.hire_date)

이렇게 구현할 수 있다.

e1=Employee("ai", 22, 300200,"20111111")
e1.about_me()

>>이름은 ai, 나이는 22입니다.
>>급여는 300200원, 입사일은 20111111입니다.

부모 클래스의 about me와 employee(자식 클래스)의 about me가 둘 다 프린트 된다.

 

다형성 : Polymorphism

같은 이름 메소드의 내부 로직을 다르게 작성

상속할 때 발생

같은 draw라는 이름의 행동이지만 어느 클래스냐에 따라 원이 그려지기도 하고 네모가 그려지기도 함

 

class Animal:
    def __init(self,name):
        self.name=name
        
    def talk(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Cat(Animal):
    def talk(self):
        return "Meow"
        
class Dog(Animal):
    def talk(self):
        return "Woof!"

animal이라는 부모클래스를 상속받은 cat과 dog 클래스에서 각각에 맞게 talk 메소드를 다시 정의해서 사용한다.

하는 행동이 비슷하기에 메소드 이름은 같게끔하고, 세부 내용만 다르게 할 때 사용한다.

 

가시성 : Visibility

필요 없는 정보에는 접근하지 않게 레벨을 조절하는 것

소스를 보호하는 역할도 있다. 

캡슐화/정보은닉(Encapsulation, information hiding) : 클래스 간의 간섭이나 정보공유를 최소화

개념적으로 정보들을 분리

class Product(object):
    pass
    
class Inventory(object):
    def __init__(self):
        self.__items=[]

inventory에서 product items는 직접 접근이 불가

private 변수

'__item' 처럼 이렇게 변수 앞에 언더바를 2개 두면 타객체가 접근하지 못한다.

마음대로 다른 객체를 추가하지 못하게 막을 수 있다.

맨글링이라서 원천 차단은 아닌데 그렇게 보이게 한다.

 

property decorator

@property

내부에서는 접근되고, 외부에서는 접근하지 못함

 

class Inventory(object):
    def __init__(self):
        self.__items= []
        
@property
def items(self):
    return self.__items

이렇게 코드를 하고

'객체.items' 와 같이 접근하면 접근 된다.

 

 

Reference:  부스트캠프 AI Tech 3기 Pre-Course-Python Object Oriented Programming