본문 바로가기
파이썬 이야기

Part 32. 파이썬 클래스의 함수와 상속

by 핸들이없는8톤트럭 2022. 8. 7.
반응형

클래스의 함수

클래스에 속하는 함수를 메소드(method)라고 부릅니다. 클래스에는 다양한 메소드가 있는데, 다음과 같습니다.

- 정적 메소드(static Method) : 클래스의 변수에 접근이 불가능한 일반 함수이나, 클래스에 귀속된 메소드

- 클래스 메소드(class method) : 클래스 변수에 접근이 가능한 함수로, 주로 클래스 변수를 조작하기 위해 사요합니다.

- 인스턴스 메소드(instance method) : 인스턴스 변수에 접근이 가능한 함수로, 속성을 조작하기 위해 사용합니다.

# 클래스의 함수

class MyClass:
    @staticmethod
    def static_method(a,b):  #정적 메소드 : 클래스와 무관하지만 클래스 내부에 구현된 함수입니다.
        return a+b

print(MyClass.static_method(1,2))
# 클래스 내부에 접근하여 사용하는 정적 메소드
# 클래스와 문법적으로 무관하지만, 내용적으로 연관이 있어 내부에 구현되어 있음

class MyClass2: # 클래스 메소드 - 클래스와 문법적으로 연관 있으나, 특정한 객체와는 상관 없는 경우
    math_name='integral'
    @classmethod
    def get_math_name(cls):
        return cls.math_name

print(MyClass2.get_math_name())

class MyClass3: # 인스턴스 메소드 : 객체의 속성을 변환하기 위해 주로 사용
    def __init__(self,name):
        self.name = name
        self.is_full = False

    def eat(self):
        self.is_full = True
        return f'{self.name}은 배가 부릅니다.'


person1 = MyClass3('gildong')
print(person1.eat())
print(person1.is_full)

 

 

클래스의 상속(Inheritance)

파이썬의 클래스끼리는 상속할 수 있습니다. 상속한다는 것은 자신이 가진 클래스의 특징을 전달하는 것을 의미합니다.

- 상속의 대상이 되는 클래스를 기본 클래스 또는 부모 클래스라고 합니다.

- 상속하여 생성한 클래스를 파생 클래스 또는 자식 클래스라고 합니다.

- A 클래스가 B클래스를 상속할 경우, A클래스는 B클래스의 모든 요소(변수와 메소드)를 포함합니다.

- Super() 함수를 이용해 기본 클래스에 직접 접근할 수 있습니다.

 

class Baseclass:
    def __init__(self):
        self.count = 0

class Derivedclass(Baseclass): # Baseclass를 상속
    def __init__(self):
        super().__init__() #부모 클래스 생성자를 호출
        self.count2 = 1
        

 

 

메소드 오버라이딩(overriding)

파생 클래스에서 기본 클래스에 구현된 메소드를 재구현 하는 것을 의미합니다.

- 같은 이름의 메소드를 구현하면, 파생 클래스의 메소드가 호출됩니다.

- super() 함수를 이용해서 기본 클래스의 메소드를 함께 호출할 수 있습니다.

 

class Base:
    def method(self):
        print('baseclass')

class Derived(Base):
    def methodA(self):
        super().method()
        print('derived class')

base =Base()
derived = Derived()

base.method()
print('----------')
derived.methodA()

 

다중 레벨 상속(Multi-Level Inheritance)

클래스는 연쇄적으로 상속할 수 있으며, 상속에 제한이 없습니다. 아무런 클래스도 상속하지 않으면, 최상위 클래스인 object 클래스를 상속합니다. 모든 python의 클래스의 최상단에는 object 클래스가 있으며, 아무 것도 없어도 object 클래스의 기능을 수행할 수 있습니다.

 

class A:
    pass

class B(A):
    pass

class C(B):
    pass

 

 

다중 상속(Multiple Inheritance)

클래스는 한번에 여러 개 상속할 수도 있으며, 개수에 제한이 없습니다.

- 다중 상속을 하는 경우에는 메소드의 참조 순서에 난해함이 있어 사용되지 않습니다.

- 해석 순서는 mro() 메소드를 이용해서 확인할 수 있습니다.

 

class base1:
    def method(self):
        print('Base1')

class base2:
    def method(self):
        print('Base2')

class MultiDerived(base1,base2):
    pass

instance = MultiDerived()
instance.method()

print(MultiDerived.mro())
반응형

댓글