본문 바로가기
파이썬

[파이썬 강좌] 10. 파이썬 OOP개념 (클래스, 객체, 상속)

by GDBS 2020. 8. 27.
728x170

이전 강좌에서는 Python이 제공하는 일부 입력 / 출력 작업에 대해 설명했습니다.

우리는 이러한 함수를 사용하여 사용자 또는 외부 소스에서 데이터를 읽는 방법과 이러한 데이터를 외부 소스에 쓰는 방법을 알게되었습니다. 또한 함수를 사용하여 거대한 코드를 더 작은 메서드로 나누는 방법과이를 호출하거나 액세스하는 방법을 배웠습니다.

 

이번 강좌에서는 OOP라고하는 고급 Python 개념과 Python에서 사용할 수있는 다양한 유형의 oops 개념과 사용 방법 및 위치에 대해 설명하겠습니다.

 

 

클래스와 객체

  • Python은 프로그래밍이 객체에 더 많은 스트레스를주는 객체 지향 프로그래밍 언어입니다.
  • 파이썬의 거의 모든 것이 객체입니다.

 

클래스 (Classes)

 

Python의 클래스는 객체의 모음이며 클래스를 청사진이나 스케치 또는 프로토 타입이라고 생각할 수 있습니다. 여기에는 개체의 모든 세부 정보가 포함됩니다.

실제 예제에서 Animal은 클래스입니다. 왜냐하면 우리는 세상에 다른 종류의 동물이 있고 이들 모두는 Animal이라는 클래스에 속하기 때문입니다.

클래스 정의

파이썬에서는 'class'키워드를 사용하여 클래스를 정의해야합니다.

문법:

클래스 클래스 이름 : # 문, 함수 또는 클래스 모음

예:

class MyClass:

a = 10

b = 20

def add():

sum = a+b

print(sum)

위의 예에서 우리는 'Myclass'라는 클래스를 선언했고 각각 몇 가지 변수와 함수를 선언하고 정의했습니다.

클래스 안에있는 이러한 함수 나 변수에 액세스하려면 해당 객체를 생성하여 클래스 이름을 사용할 수 있습니다.

먼저 클래스 이름을 사용하여 액세스하는 방법을 살펴 보겠습니다.

예:

class MyClass:

       a = 10

       b = 20

 

 

#Accessing variable present inside MyClass

print(MyClass.a)

산출

10

산출:

 

객체 (Objects)

객체는 일반적으로 클래스의 인스턴스입니다. 클래스 내부에있는 모든 것에 액세스하는 데 사용됩니다.

개체 만들기

문법:

변수 이름 = 클래스 이름

예:

ob = MyClass()

이렇게하면 'ob'이라는 새 인스턴스 개체가 생성됩니다. 이 개체 이름을 사용하여 MyClass 클래스 내에있는 모든 속성에 액세스 할 수 있습니다.

예:

class MyClass:

       a = 10

       b = 20

       def add(self):

              sum = self.a + self.b

              print(sum)

 

#Creating an object of class MyClass

ob = MyClass()

 

#Accessing function and variables present inside MyClass using the object

print(ob.a)

print(ob.b)

ob.add()

산출:

10
20
30

산출:

Python의 생성자

Python의 생성자는 객체가 생성 될 때 런타임 중에 클래스의 멤버를 초기화하는 데 사용되는 특수 메서드입니다.

파이썬에는 이중 밑줄 (__)로 시작하는 특별한 내장 클래스 메서드가 있으며 파이썬에서는 특별한 의미를 갖습니다.

생성자의 이름은 항상 __init __ ()입니다.

모든 클래스에는 생성자가 있어야합니다. 생성자를 명시 적으로 생성하지 않더라도 자체적으로 기본 생성자를 생성합니다.

예:

class MyClass:

        sum = 0

 

def __init__ (self, a, b):

      self.sum = a+b

 

def printSum(self):

       print(“Sum of a and b is: ”, self.sum)

 

#Creating an object of class MyClass

ob = MyClass(12, 15)

ob.printSum()

산출:

a와 b의 합 : 27

산출:

위의 예에서 관찰하면 __init __ () 메서드를 호출하지 않습니다. 해당 클래스에 대한 객체를 생성하고 데이터 멤버가있는 경우 초기화 할 때 자동으로 호출되기 때문입니다.

생성자는 절대 값을 반환하지 않으므로 반환 문을 포함하지 않습니다.

 

상속

상속은 OOP의 가장 강력한 개념 중 하나입니다.

다른 클래스의 속성을 상속하는 클래스를 상속이라고합니다.

속성을 상속받는 클래스를 자식 클래스 / 하위 클래스라고하고 속성이 상속되는 클래스를 부모 클래스 / 기본 클래스라고합니다.

Python은 세 가지 유형의 상속을 제공합니다.

  • 단일 상속
  • 다단계 상속
  • 다중 상속

 

1) 단일 상속

단일 상속에서 한 클래스는 한 클래스의 속성 만 상속합니다.

예:

class Operations:

       a = 10

       b = 20

       def add(self):

              sum = self.a + self.b

              print(“Sum of a and b is: “, sum)

 

class MyClass(Operations):

       c = 50

      d = 10

      def sub(self):

            sub = self.c – self.d

            print(“Subtraction of c and d is: ”, sub)

 

ob = MyClass()

ob.add()

ob.sub()

산출:

a와 b의 합 : 30
c와 d를 빼면 40

산출:

위의 예에서는 'Operations'클래스의 속성을 'MyClass'클래스로 상속합니다.

따라서 MyClass 개체를 사용하여 'Operations'클래스에있는 모든 메서드 또는 문에 액세스 할 수 있습니다.

 

 

2) 다단계 상속

다중 수준 상속에서 하나 이상의 클래스가 기본 클래스로 작동합니다.

즉, 두 번째 클래스는 첫 번째 클래스의 속성을 상속하고 세 번째 클래스는 두 번째 클래스의 속성을 상속합니다. 따라서 두 번째 클래스는 Parent 클래스와 Child 클래스 모두로 작동합니다.

예:

class Addition:

       a = 10

       b = 20

       def add(self):

              sum = self.a + self.b

              print(“Sum of a and b is: ”, sum)

 

class Subtraction(Addition):

       def sub(self):

              sub = self.b-self.a

              print(“Subtraction of a and b is: ”, sub)

 

class Multiplication(Subtraction):

      def mul(self):

             multi = self.a * self.b

             print(“Multiplication of a and b is: ”, multi)

 

ob = Multiplication ()

ob.add()

ob.sub()

ob.mul()

산출:

a와 b의 합 : 30
a와 b의 빼기 : 10
a와 b의 곱 : 200

산출:

위의 예에서 'Subtraction'클래스는 'Addition'클래스의 속성을 상속하고 'Multiplication'클래스는 'Subtraction'클래스의 속성을 상속합니다. 따라서 'Subtraction'클래스는 기본 클래스와 파생 클래스로 작동합니다.

 

 

3) 다중 상속

여러 클래스의 속성을 상속하는 클래스를 Multiple Inheritance라고합니다.

예:

class Addition:

       a = 10

       b = 20

       def add(self):

              sum = self. a+ self.b

              print(“Sum of a and b is: “, sum)

 

class Subtraction():

       c = 50

       d = 10

       def sub(self):

              sub = self.c-self.d

              print(“Subtraction of c and d is: ”, sub)

 

class Multiplication(Addition,Subtraction):

       def mul(self):

              multi = self.a * self.c

              print(“Multiplication of a and c is: ”, multi)

 

ob = Multiplication ()

ob.add()

ob.sub()

ob.mul()

산출:

a와 b의 합 : 30
c와 d의 빼기 : 10
a와 c의 곱셈 : 500

산출:

 

Python의 메서드 오버로딩

이름은 같지만 매개 변수 유형이 다르거 나 매개 변수 수가 다른 여러 메서드를 메서드 오버로딩이라고합니다.

예:

def product(a, b):

       p = a*b

       print(p)

 

def product(a, b, c):

       p = a*b*c

       print(p)

 

#Gives you an error saying one more argument is missing as it updated to the second function

#product(2, 3)

product(2, 3, 5)

산출:

30

산출:

산출:

파이썬에서는 메서드 오버로딩이 지원되지 않습니다. 위의 예에서 보면 'product'라는 이름은 같지만 매개 변수 수가 다른 두 함수를 정의했기 때문입니다.

그러나 Python에서는 최신 정의가 업데이트되므로 product (a, b) 함수가 쓸모 없게됩니다.

 

Python에서 메서드 재정의

 

서브 클래스 메서드가 슈퍼 클래스 메서드에서 선언 된 것과 동일한 이름을 갖는 경우이를 메서드 재정의라고합니다.

메서드 재정의를 수행하려면 상속을 사용해야합니다.

예:

class A:

       def sayHi():

              print(“I am in A”)

 

class B(A):

       def sayHi():

              print(“I am in B”)

 

ob = B()

ob.sayHi()

산출:

나는 B에있다

산출:

 

 

Python에서 데이터 숨기기

 

데이터 숨김은 다른 클래스 멤버가 액세스 할 수 없도록 데이터를 비공개로 만드는 것을 의미합니다. 선언 된 클래스에서만 액세스 할 수 있습니다.

파이썬에서 변수를 숨기려면 변수 이름 앞에 이중 밑줄 (__)을 써야합니다.

예:

Class MyClass:

        __num = 10

        def add(self, a):

               sum = self.__num + a

               print(sum)

 

ob = MyClass()

ob.add(20)

 

print(ob.__num)

 

#The above statement gives an error because we are trying to access private variable outside the class

산출:

30
트레이스 백 (최근 호출 마지막) :
파일“DataHiding.py”, 10 행,
인쇄 중 (ob .__ num)
AttributeError : MyClass 인스턴스에
'__num 속성  없습니다.

산출:

 

클래스는 객체의 모든 세부 정보를 포함하는 청사진 또는 템플릿이며 객체는 클래스의 인스턴스입니다.

  • 다른 클래스의 속성을 클래스로 가져 오려면 상속을 통해 수행 할 수 있습니다.
  • 상속은 단일 상속, 다중 수준 상속 및 다중 상속의 세 가지 유형이 있습니다.
  • Python에서는 메서드 오버로딩이 지원되지 않습니다.
  • 메서드 재정의는 다른 클래스에 정의 된 동일한 함수의 구현을 재정의하는 데 사용됩니다.
  • 데이터 속성을 비공개로 만들거나 숨길 수 있으므로 정의 된 클래스 외부에서 액세스 할 수 없습니다.

다음 튜토리얼에서는 추가적인 Python 개념에 대해 자세히 설명합니다 !!

 

 

 

728x90
반응형
그리드형

댓글