Python oop 알아보기

오늘은 파이썬에서의 객체지향 프로그래밍을 알아보고 실습해보았습니다.

프로그램을 여럿이 개발할 경우에 객체로 묶어서 작성할 수 있습니다.

파이썬 역시 객체 지향 프로그램 언어입니다.

클래스에서 인스턴스를 찍어낸다고 볼 수 있습니다.

선언

class name(object):

class 예약어와 class 이름 그리고 상속받는 객체명순입니다.

속성

속성 추가는 __init__ (생성자)로 객체 초기화하면서 넣습니다.

class name(object):
    def __init__(self, name1, name2):
        self.name1 = name1
        self.name2 = name2

객체를 생성하면서 생성자 인자에 들어온 값을 속성으로 넣어줍니다.

self

function(Action) 추가는 기존 함수와 같지만, self를 추가해야만 해당 class의 함수로 인식됩니다.

object

이름 선언과 함께 초기값을 입력하면 인자로 넘길 수 있습니다.

minicar = car("super","oil")

객체명과 Class명 그리고 생성자 함수의 인자값 순입니다.

상속

부모 클래스로부터 속성과 메소드를 물려받은 자식 클래스를 생성합니다.

class name(object):
    def __init__(self, name1, name2):
        self.name1 = name1
        self.name2 = name2

class ko_name(name):
    pass

자식 클래스에서 상속 받으면 부모 클래스에서 속성과 메소드를 가져올 수 있습니다.

다형성

같은 이름의 메소드인데 내부 로직을 다르게 작성할 수 있습니다.

dynamic typing 특성으로 인해 파이썬에서는 같이 부모 클래스의 상속에서 주로 발생합니다.

class car(object):
    def __init__(self,engine,fuel):
        self.engine = engine
        self.fuel = fuel

    def run(self):
        print("running car")

class second_car(car):
    def run(self):
        print("running second car")

상속받아서 오버라이딩할 수 있습니다.

가시성

누구나 객체의 속성을 볼 필요가 없기 때문에 접근 지정자를 설정할 수 있습니다.

파이썬에서는 접근 지정자가 따로 없지만 이름 규칙으로 사용하게 됩니다.

보호하려면 밑줄을 사용하게 됩니다.

class car(object):
    def __init__(self,engine,fuel):
        self.engine = engine
        self.fuel = fuel
        self.__price = "10000"

이러한 속성은 공개적이지 않기 때문에 다른 언어에서의 getter와 setter 처럼 이용해야합니다.

다만, 파이썬에서는 @property 데코레이터와 setter 속성으로 사용하게 됩니다.

    @property
    def price(self):
        return self.__price

    @price.setter
    def price(self,n):
        self.__price = n

이런식으로 코딩하면 인자의 존재 여부로 setter와 getter처럼 사용할 수 있습니다.

print(minicar.price)

@property 데코레이터를 이용하여 함수를 변수처럼 호출할 수 있습니다.

실습 코드

class car(object):
    def __init__(self,engine,fuel):
        self.engine = engine
        self.fuel = fuel
        self.__price = "10000"

    @property
    def price(self):
        return self.__price

    @price.setter
    def price(self,n):
        self.__price = n

    def __str__(self):
        toString = self.engine + " " + self.fuel + " " + "Car"
        return toString
    def run(self):
        print("running car")

class second_car(car):
    def run(self):
        print("running second car")



minicar = car("super","oil")
print(minicar)
print(minicar.price)
minicar2 = second_car("super","oil")
print(minicar2)
minicar2.run()
print(minicar2.price)
Written on February 26, 2018