클래스의 함수
클래스에 속하는 함수를 메소드(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())
'파이썬 이야기' 카테고리의 다른 글
Part 34. 파이썬 모듈과 패키지 : 외부 패키지 설치하기 (0) | 2022.08.07 |
---|---|
Part 33. 파이썬의 모듈과 패키지 (0) | 2022.08.07 |
Part 31. 파이썬 클래스의 변수 (0) | 2022.08.06 |
Part 30. 파이썬 클래스와 객체, 생성자 (0) | 2022.08.06 |
Part 29. 파이썬 함수의 반환과 람다(Lambda) 함수 (0) | 2022.08.06 |
댓글