프로그래밍/HTML

파이썬의 상속(Inheritance), 다형성(Polymorphism), 가시성(Visibility), decorate

emhaki 2022. 5. 17. 14:14
728x90
반응형
SMALL
상속(Inheritance)

부모클래스로 부터 속성과 Method를 물려받은 자식 클래스를 생성 하는 것

class Person(object):
	def __init__(self, name, age):
    	self.name = name
    	self.age = age
    def __str__(self):
    	return "저의 이름은{0} 입니다. 나이는 {1} 입니다.".format(self.name, self.age)
    
class Korean(Person):
	pass
   
first_korean = Korean("Myeonghak", 28)
print(first_korean.name)

부모 클래스 Person에서는 name과 age가 있음 이를 Korean(Person)으로 상속을 받음

상속받았기 때문에 Person이 가지고 있는 속성을 그대로 사용할 수 있음. 

 

다형성(Polymorphism)

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

Dynamic Typing 특성으로 인해 파이썬에서는 같은 부모클래스의 상속에서 주로 발생함

중요한 OOP의 개념이나 너무 깊이 알 필요 X

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! Woof!"

animals = [Cat("Missy"), Cat("Mr.Mistoffelees"), Dog("Lassie")]

for animal in animals:
	print(animal.name + ": " + annimal.talk())

각각의 클래스에 속해있는 talk를 선언해주면 출력되는 결과 값이 다름

 

가시성(Visibility)

객체의 정보를 볼 수 있는 레벨을 조절하는 것

누구나 객체 안에 모든 변수를 볼 필요가 없음

  1. 객체를 사용하는 사용자가 임의로 정보 수정
  2. 필요 없는 정보에는 접근 할 필요가 없음
  3. 만약 제품으로 판매한다면? 소스의 보호
class Product(object):
	pass
class Inventory(object):
	def __init__(self):
    	self.__items = []
        
    def add_new_item(self, product):
    	if type(product) == Product:
        	self.__items.append(product)
            print("new item added")
        else:
        	raise ValueError("Invalid Item")
    
    def get_number_of_items(self):
    	return len(self.__items)

Product 객체를 Inventory 객체에 추가

Inventory에는 오직 Product 객체만 들어감

Inventory에 Product가 몇 개인지 확인이 필요

Inventory에 Product Items는 직접 접근이 불가

Private 변수로 선언해서 타객체가 items에 접근 못함

 

decorate
Class Student:
	def __init__(self, name, marks):
    	self.name = name
        self.marks = marks
    @property
    def gotmarks(self):
    	return self.name + 'obtained' + self.marks + 'marks'

여기에 @property가 바로 decorate.

내부에 있는 객체를 접근할 수 있게 해주는 기능

728x90
반응형