class ParentClass:
<code block>
class ChildClass(ParentClass):
<code block>
issubclass(class, classinfo)
True
를 반환isinstance(object, classinfo)
True
를 반환super()
super()
를 사용할 수 있습니다.class ChildClass(ParentClass):
def method(self, arg):
super().method(arg)
동일한 메서드가 클래스에 따라 다르게 행동할 수 있음
즉, 서로 다른 클래스에 속해있는 객체들이 동일한 메시지에 대해 각기 다른 방식으로 응답될 수 있다.
: Method Overriding
상속 받은 메서드를 재정의
할 수도 있습니다.
상속 받은 클래스에서 **같은 이름의 메서드**로 덮어씁니다.
__init__
, __str__
의 메서드를 정의하는 것 역시, 메서드 오버라이딩입니다.
class Person:
def __init__(self, name):
self.name = name
def talk(self):
print(f'안녕, {self.name}')
class Soldier(Person):
# 부모 클래스에 있는 메소드를 재정의해서 덮어씌운다.
def talk(self):
print(f'군인 {self.name}')
p = Person('윤호') # 안녕, 윤호
p.talk()
s =Soldier('유천') # 군인 유천
s.talk()
객체의 일부 구현 내용에 대해 외부로부터의 직접적인 액세스를 차단하는 것을 말합니다.
다른 언어와 달리 파이썬에서 캡슐화는 암묵적으로는 존재하지만, 언어적으로는 존재하지 않습니다.
접근 제어자 | 문법 | 의미 |
---|---|---|
Public | name | 외부로부터 모든 접근 허용 |
Protected | _name | 자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근 허용 |
Private | __name | 자기 클래스 내부의 메서드에서만 접근 허용 |
언더바가 없이 시작하는 메서드나 속성들이 이에 해당합니다.
어디서나 호출 가능합니다.
하위 클래스에서 메서드 오버라이딩을 허용합니다.
일반적으로 작성되는 메서드와 속성의 대다수를 차지합니다.
언더바 1개로 시작하는 메서드나 속성들이 이에 해당합니다.
암묵적 규칙에 의해 부모 클래스 내부와 자식 클래스에서만 호출 가능합니다.
하위 클래스에서 메서드 오버라이딩을 허용합니다.
-> subclass에서 사용하겠다는 의미, 그러나 강제성은 없어서 Public과 거의 동일하게 외부접근이 가능
언더바 2개로 시작하는 메서드나 속성들이 이에 해당합니다.
본 클래스 내부에서만 사용이 가능합니다.
하위 클래스 상속 및 호출이 불가능합니다.
외부 호출이 불가능합니다.